创建HTTPSSSESSION时,如何更改默认设备



我想在登录用户

的基础上创建任何httpsession时更改默认的sessionTrackingModes

因此,我创建了自己的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

,因为评论无法解释详细信息。让我在这里回答:

  1. 因此,是否有任何方法可以更改默认的会话跟踪模式

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

  1. 是否有可能将当前的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}!$ 1:所有URL
%{http_cookie:jsessionid}:从cookie获取jsessionid,并设置为url

相关内容

  • 没有找到相关文章

最新更新