如何在创建HttpsSession时更改DefaultSessionTrackingModes

问题描述 投票:2回答:1

我想在基于登录用户创建任何HttpSession时更改DefaultSessionTrackingModes

所以为此,我创建了自己的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());

    }



}

那么有没有办法改变默认会话跟踪模式

先谢谢,Vishal

java spring servlets java-ee httpsession
1个回答
0
投票

因为评论无法解释细节。我在这里回答:

  1. 那么有没有办法改变默认会话跟踪模式

是。使用ServletContext.setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes)更改servlet的SessionTrackingMode(意味着更改会影响对该servlet的所有请求)。 您无法为每个请求/用户更改SessionTrackingMode。 参考:setSessionTrackingModes

  1. 是否有可能我们分离当前的ServletContextListner并在应用程序上下文中添加新的依赖于HttpsSession

首先,我认为你不能这样做。因为问题的根源是你试图改变应用程序的范围属性sessionTracking。此更改会影响ServletContext中的所有请求,而不会影响某些特定请求。 其次,您可以使用apache mod_rewritemod_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美元:所有网址 %{HTTP_COOKIE:jsessionid}:从cookie获取jsessionid,并设置为url

© www.soinside.com 2019 - 2024. All rights reserved.