会话超时后重定向(Grails、Spring Security Core、Tomcat)
Posted
技术标签:
【中文标题】会话超时后重定向(Grails、Spring Security Core、Tomcat)【英文标题】:Redirect after Session timeout (Grails, Spring Security Core, Tomcat) 【发布时间】:2012-05-18 21:05:19 【问题描述】:我有一个在 Grails (v1.3.7) 中开发的应用程序,我们使用 Spring Security Core (v1.2.6) 插件进行身份验证。在构建 .war 文件后,我在标准的 tomcat 服务器中部署了应用程序 (v7.0.22)。应用程序运行良好。
我知道我可以在构建应用程序之前或在 tomcat 服务器本身中配置 web.xml 中的会话超时时间。但是,我希望(另外)在会话超时时自动将任何页面重定向到登录页面。因为,如果 Session 超时并且用户点击任何链接或只是刷新当前页面,他们就会得到一个 tomcat 错误。
谁能建议一种轻松解决它的方法? Tomcat 或 Spring Security Core 中是否有任何配置(如 expired-session-url)可以完成这项工作?
我在插件文档站点、插件博客站点中进行了搜索,但没有找到。 This site 建议我需要在代码中添加一个侦听器,我不想这样做,并且想使用像 this 这样的简单配置。谁能指导一下?
感谢期待
【问题讨论】:
【参考方案1】:Http 是无状态协议,而 session 只是存储在客户端 cookie(+本地 db)上的标记,您不能将其作为事件处理。 'new client' 和 'session expired' 完全一样,只是表示你无法识别当前请求的浏览器。在大多数情况下,这也意味着用户未经过身份验证(至少对于原始 Spring Security Core)
对于你的情况,你已经有会话过期的处理程序,当你收到这个 tomcat 错误时。只需处理此错误,并将用户重定向到登录页面。
顺便说一句,如果你有正确的 Spring Security 配置,它必须将所有非授权用户重定向到登录页面。如果您有经过身份验证的用户,但在标准的 tomcat 会话中仍然有一些用户数据,那么您的应用程序架构似乎有问题。至少有两种方法:避免您自己的用户会话,或者进行某种基于会话的 Spring Security 身份验证配置。
【讨论】:
伊戈尔,你是对的。我只需要将 @Secured(['IS_AUTHENTICATED_FULLY']) 添加到所有不需要任何特定用户角色的控制器(对所有角色开放,但不是匿名的)。为特定角色定义的控制器按预期工作。以上是关于会话超时后重定向(Grails、Spring Security Core、Tomcat)的主要内容,如果未能解决你的问题,请参考以下文章
Grails 2 Spring Security Plugin - 成功登录后重定向到 /login/denied
如果会话超时,如何在 MVC 中的 jquery ajax 调用后重定向到新页面?
Grails Spring Security - 会话超时后重新登录时重新加载会话变量
在 Grails Spring Security Core 插件中配置会话超时,无需修改“War”
Spring Security OAuth 2.0 Google:在未经授权的请求后重定向到默认 URL 而不是请求的 URL