Как изменить DefaultSessionTrackingModes при создании HttpsSession - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу изменить DefaultSessionTrackingModes, когда любой HttpSession создается на основе учетной записи пользователя

. Для этого я создал свой собственный HttpSessionListner

@WebListener
public class HttpSession1TrackingModeSetter implements HttpSessionListener
{

    /*
     * (non-Javadoc)
     *
     * @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
     */
    @Override
    public void sessionCreated(final HttpSessionEvent hse)
    {
        hse.getSession().getServletContext().getDefaultSessionTrackingModes();
        System.out.println("Session is created" + hse.getSession().getId());
        if(/*Curr*/){
            // Default Session URL
        }else{
            // Defualt Session Cookie
        }

    }

    /*
     * (non-Javadoc)
     *
     * @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
     */
    @Override
    public void sessionDestroyed(final HttpSessionEvent hse)
    {
        System.out.println("sessionDestroyed is created" + hse.getSession().getId());

    }



}

Так есть ли способ изменитьрежим отслеживания сеансов по умолчанию

Заранее спасибо, Вишал

1 Ответ

0 голосов
/ 27 февраля 2019

Потому что комментарий не может объяснить детали.Позвольте мне ответить здесь:

  1. Так есть ли способ изменить режим отслеживания сеансов по умолчанию

Да.Используйте ServletContext.setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) для изменения SessionTrackingMode сервлета (означает, что изменение влияет на все запросы к этому сервлету).
Вы не можете изменить SessionTrackingMode для каждого запроса / пользователя.
Ссылка: setSessionTrackingModes

возможно ли, что мы отсоединили текущий ServletContextListner и добавили новый в контексте приложения, поскольку это зависит от HttpsSession

Во-первых, я думаю, что вы НЕ МОЖЕТЕ сделать это.Поскольку причина проблемы в том, что вы пытаетесь изменить свойство области приложения sessionTracking.Это изменение влияет на все запросы в ServletContext, а не на некоторые конкретные запросы.
Во-вторых, вы можете использовать apache mod_rewrite и mod_headers , чтобы "изменить" sessionTracking для конкретного запроса.
- добавить заголовок для конкретного запроса, который вы хотите изменить sessionTrackingMode.Например: 'X-SESSION-TRACKING-URL'
- В настройке apache добавьте следующее правило:

RewriteCond %{HTTP:X-SESSION-TRACKING-URL} !^$
RewriteRule ^(.+) $1?jsessionid=%{HTTP_COOKIE:jsessionid}

Объяснение:
% {HTTP: X-SESSION-TRACKING-URL}! ^ $: Если есть заголовок X-SESSION-TRACKING-URL, тогда переписать URL
$ 1: весь URL
% {HTTP_COOKIE: jsessionid}: получить jsessionid из cookie и установить значение url

...