我要在基于登录用户创建任何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());
}
}
那么有什么方法可以更改默认会话跟踪模式
预先感谢, 维沙尔
答案 0 :(得分:0)
因为评论无法解释细节。让我在这里回答:
- 那么有什么方法可以更改默认会话跟踪模式
是的。使用ServletContext.setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes)
更改Servlet的SessionTrackingMode(意味着更改影响到对该Servlet的所有请求)。
您不能为每个请求/用户更改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}:从cookie中获取jsessionid,并将其设置为url