如何通过Pac4j/Shiro设置会话超时?配置10小时却60分钟过期
会话超时配置问题排查与解决
问题描述
已配置Shiro会话超时为10小时(36000000毫秒),Keycloak也做了对应设置,但会话仍会在60分钟后过期,同时询问是否需要在web.xml中添加session-config配置。
现有配置
Shiro.ini配置
sessionManager =org.apache.shiro.web.session.mgt.DefaultWebSessionManager sessionManager.sessionIdCookie =$sessionIdCookie sessionManager.sessionIdCookieEnabled =true securityManager.sessionManager= $sessionManager # 3,600,000 milliseconds = 1 hour -> set to 10 hours sessionManager.globalSessionTimeout= 36000000
Keycloak配置
(对应SSO会话相关设置)
待确认的web.xml配置
<!-- sets the default session timeout to 480 minutes. --> <session-config> <session-timeout>480</session-timeout> </session-config>
问题排查与解决步骤
1. 补全Shiro的SessionIdCookie超时配置
你仅设置了服务器端的globalSessionTimeout,但浏览器端的Session ID Cookie未配置超时时间。默认情况下Cookie的maxAge为-1(关闭浏览器即失效),或继承容器默认的60分钟超时,会导致浏览器端Cookie提前过期,用户无法继续使用原有会话。
需在Shiro.ini中添加Cookie超时配置,确保与服务器端会话超时一致:
# 新增SessionIdCookie的具体配置 sessionIdCookie = org.apache.shiro.web.servlet.SimpleCookie sessionIdCookie.name = JSESSIONID # 设置为10小时对应的毫秒数,与globalSessionTimeout保持一致 sessionIdCookie.maxAge = 36000000 sessionIdCookie.httpOnly = true sessionIdCookie.path = / # 保留原有sessionManager配置 sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager sessionManager.sessionIdCookie = $sessionIdCookie sessionManager.sessionIdCookieEnabled = true sessionManager.globalSessionTimeout = 36000000 securityManager.sessionManager = $sessionManager
2. 检查Keycloak的完整会话配置
需确保Keycloak中的两个核心会话参数都设置为10小时(600分钟):
- SSO Session Max:会话的最大生命周期,无论用户是否活跃,到时间都会过期
- SSO Session Idle:会话的空闲超时,用户超过该时间无操作则过期
如果SSO Session Idle设置为60分钟,即使Max设置为10小时,用户60分钟不操作也会触发会话过期,这很可能是当前问题的根源。
3. web.xml的session-config配置说明
如果你使用的是Shiro的DefaultWebSessionManager(如当前配置),Shiro会独立管理会话,不依赖Servlet容器的会话机制,因此不需要在web.xml中添加session-config配置,反而可能因容器会话超时(480分钟)与Shiro会话超时不一致导致冲突。
但如果应用中存在直接调用request.getSession()的代码(即使用Servlet容器会话),则需确保容器会话超时与Shiro会话超时一致,此时可保留web.xml配置并设置为600分钟(10小时)。
额外注意事项
- 集群部署环境下,需配置Shiro会话持久化(如Redis、数据库),避免会话仅存储在单个节点导致的异常过期。
- 修改配置后需重启应用和Keycloak,清除浏览器缓存和Cookie后再测试。
内容的提问来源于stack exchange,提问作者vished2000
相关产品推荐
相关产品推荐

