Как я могу загрузить Java HttpSession из JSESSIONID?

TLDR; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)

Похоже, вы хотите «xn times» или «xm times», я думаю, что буквальный перевод в regex будет (x{n}|x{m}). Как https://regex101.com/r / vH7yL5 / 1

или, если вы можете иметь последовательность более m "x" s (при условии m> n), вы можете добавить 'follow no "x" 'и', за которым следует «x», переводя на [^x](x{n}|x{m})[^x], но это предполагает, что всегда есть символ и после вас «x». Как вы можете видеть здесь: https://regex101.com/r/bB2vH2/1

вы можете изменить его на (?:[^x]|^)(x{n}|x{m})(?:[^x]|$), переведя на «follow no» x ' или после начала строки «и», за которым следует «x» или за ним следует конец строки ». Но все же он не будет соответствовать двум последовательностям с одним символом между ними (потому что для первого совпадения потребуется символ после, а второй - символ раньше), как вы можете видеть здесь: https://regex101.com / r / oC5oJ4 / 1

Наконец, чтобы соответствовать удалению в один символ, вы можете добавить положительный взгляд вперед (? =) на «нет» x «после» или положительный загляните назад (? & lt; =) в «no» x 'before », например: https://regex101.com/r/mC4uX3/1

(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)

Таким образом, вы будете соответствовать только точному числу «х», которое вы хотите.

13
задан BalusC 22 June 2010 в 11:13
поделиться

3 ответа

Вам нужно собрать их все на карте , используя HttpSessionListener сам.

public class HttpSessionCollector implements HttpSessionListener {
    private static final Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();

    @Override
    public void sessionCreated(HttpSessionEvent event) {
        HttpSession session = event.getSession();
        sessions.put(session.getId(), session);
    }


    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        sessions.remove(event.getSession().getId());
    }

    public static HttpSession find(String sessionId) {
        return sessions.get(sessionId);
    }

}

Просто зарегистрируйте его в web.xml , чтобы запустить его:

<listener>
    <listener-class>com.example.HttpSessionCollector</listener-class>
</listener>

Затем в любом месте, где вы хотите, просто выполните HttpSessionCollector.find (sessionId) , чтобы получить HttpSession под вопросом.


Тем не менее, это огромный запах. Безусловно, существуют более эффективные способы удовлетворить фактическое функциональное требование , чем это;) Как я прокомментировал в вашем дополнительном вопросе :

Это второй раз, когда вы задаете вопрос что в реальном мире никогда не следует практиковать. Честно говоря, это все пахнет. Что это, проблема, для которой, по вашему мнению, получение HttpSession , связанное с JSESSONID на стороне сервера, и получение значения JSESSIONID на стороне клиента является «решением»? Расскажите об этом в новом вопросе, и вы получите ответы, как это сделать правильно.

Примите это серьезно. Мы не дразним вас, мы просто пытаемся помочь вам в правильном направлении, чтобы избежать поломки вашего проекта / веб-приложения из-за дыр в безопасности и неправильной практики и / или того, что вас уволят.

30
ответ дан 1 December 2019 в 19:49
поделиться

Нет, API не позволяет этого.

Я бы сказал больше, но это все.

2
ответ дан 1 December 2019 в 19:49
поделиться

Вы можете сделать это, как указано выше, но существование такого средства является первичным нарушением безопасности между разными пользователями. Вы не должны встраивать подобные вещи в свое приложение.

1
ответ дан 1 December 2019 в 19:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: