java - 创建 HttpsSession 时如何更改 DefaultSessionTrackingModes
问题描述
当基于登录用户创建任何 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());
}
}
那么有什么方法可以更改默认会话跟踪模式
提前致谢, 维沙尔
解决方案
因为评论无法解释细节。让我在这里回答:
- 那么有什么方法可以更改默认会话跟踪模式
是的。用于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} !^$: 如果有 header X-SESSION-TRACKING-URL,则重写 url
$1: all of url
%{HTTP_COOKIE:jsessionid}: get jsessionid from cookie , 并设置为 url
推荐阅读
- python - 如何将随机游走更改为自我避免随机游走
- docker - 如何使用 pm2 运行 docker 容器?
- python - 在 Python 的 Numpy 中,点积不等于 einsum,我不知道为什么不
- oracle - 为什么在 v$session 中显示 ACTIVE 的长时间运行的 pl/sql 代码不会出现在 v$active_session_history 中
- php - 在子目录下安装 Laravel,某些路由不工作
- virtual-machine - 无法通过 AzurePowerShell 部署 VM 某些 powershell 模块冲突
- python - 在 Python 中读取给定目录中的图像文件
- asp.net-core - Nginx Ingress 后面的 IdentityServer4,使用 Terraform 和 Helm 部署:并非所有用户都可以登录
- android - 通知单击未调用NewIntent
- angular - 更新到最新的 Angular CLI 后,ng serve 命令不起作用