WebSphere Liberty服务器重启时会话失效配置咨询
WebSphere Liberty服务器重启时会话失效配置咨询
嗨,我来帮你解决这个问题~ 你遇到的情况是因为WebSphere Liberty默认会将会话数据持久化到磁盘,重启后会自动加载这些会话,所以旧的JSESSIONID还能继续使用。要实现服务器重启后让所有会话失效,有几个实用的配置方案,你可以根据自己的需求选择:
方案1:完全禁用会话持久化
如果你的应用不需要会话在重启后保留,直接禁用会话持久化是最直接的方式。修改httpSession配置,添加persistenceEnabled="false"属性:
<httpSession cookieName="MyAppJSESSIONID" cookiePath="/myapp" invalidateOnUnauthorizedSessionRequestException="true" persistenceEnabled="false"/>
这样服务器重启后,之前的会话数据不会被保存,旧的JSESSIONID自然就失效了,用户必须重新登录。
方案2:启动时清除持久化的会话数据
如果平时需要会话持久化(比如服务器意外宕机后恢复会话),但希望每次主动重启时清除所有旧会话,可以给httpSession添加sessionDatabase子元素,并设置purgeOnStartup="true":
<httpSession cookieName="MyAppJSESSIONID" cookiePath="/myapp" invalidateOnUnauthorizedSessionRequestException="true"> <sessionDatabase purgeOnStartup="true"/> </httpSession>
这个配置会在服务器每次启动时,清空之前持久化的所有会话数据,旧的JSESSIONID就无法被识别,用户需要重新登录。
额外注意:SSO(LTPA令牌)的处理
你还配置了SSO的LTPA令牌,即使会话失效了,如果旧的LTPA令牌还在有效期内,用户可能还是会自动登录。如果要让LTPA令牌在重启后也失效,可以这样做:
- 在
webAppSecurity配置里缩短令牌的有效期,比如设置expirationTimeout="30m"(30分钟),这样旧令牌很快就会过期:<webAppSecurity includePathInWASReqURL="true" ssoCookieName="myappLTPATOKEN" expirationTimeout="30m"/> - 如果你希望重启后立刻让所有LTPA令牌失效,需要每次重启时重新生成LTPA密钥,但这个操作比较繁琐,通常推荐用缩短超时的方式来平衡安全性和便利性。
备注:内容来源于stack exchange,提问作者Technogix
相关产品推荐
相关产品推荐

