Grails Spring Security - 登录后总是重定向到特定页面?

Posted

技术标签:

【中文标题】Grails Spring Security - 登录后总是重定向到特定页面?【英文标题】:Grails Spring Security - Always redirect to specific page after login? 【发布时间】:2014-07-21 21:06:25 【问题描述】:

我有一个使用 spring 安全插件进行身份验证的 grails 应用程序。如果我的会话过期,并且我单击应用程序中的链接,它会将我带到登录屏幕,然后尝试重定向到我之前所在的页面。

我想将 spring security 配置为始终重定向到主页而不是用户单击的最后一页。是否有控制此行为的设置?

【问题讨论】:

【参考方案1】:

除了设置defaultTargetUrl,您还需要告诉 Spring Security 强制使用该默认目标 URL。你的Config.groovy 应该是这样的:

grails.plugins.springsecurity.successHandler.alwaysUseDefault = true
grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/home'

如果需要,您可以使用 SavedRequestAwareAuthenticationSuccessHandler 的 Spring Security API 文档研究更多选项。

更新: 更高版本的插件使用grails.plugin 而不是grails.plugins

【讨论】:

我看到this answer 也使用successHandler.alwaysUseDefaultTargetUrl 设置,但我们需要那个吗? bean中的属性值is set from alwaysUseDefault 它可能是在最近的版本中合并的。我没看过,但很有可能。我将编辑答案以反映这一点。 看起来像,虽然我也看到 1.x version also uses the same way 最近的版本。 我想更多的是旧版本的 Spring Security 有两个设置,但我明白你关于插件提供的包装器的观点。 其实,我刚刚想通了...该属性应该以grails.plugin 开头,而不是grails.plugins。一旦多余的 's' 被删除,它就像我希望的那样工作。【参考方案2】:

我正在使用 grails 2.4.4,它应该是:

grails.plugin.springsecurity.successHandler.alwaysUseDefault = true
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/your-url'

代替:

grails.plugins.springsecurity.successHandler.alwaysUseDefault = true
grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/your-url'

【讨论】:

【参考方案3】:

是的,有一个设置successHandler.defaultTargetUrl(默认为根上下文)

grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/home'

其中/home 表示到主页的路由。

【讨论】:

这个设置似乎对我看到的行为没有影响。如果会话已过期,用户仍会被重定向到他们单击的页面,而不是此属性中指定的页面。 是的,我假设 grails.plugins.springsecurity.successHandler.alwaysUseDefault 设置为 true,因为您之前在成功登录时进行了重定向。 @迈克尔

以上是关于Grails Spring Security - 登录后总是重定向到特定页面?的主要内容,如果未能解决你的问题,请参考以下文章

grails-spring-security-rest 插件和悲观锁定

Grails + spring-security-core:用户登录后如何分配角色?

Grails Spring Security注释问题

Grails spring-security-oauth-google:如何设置

Grails Spring Security 插件网址

Grails/Spring Security:无法使用新创建的用户登录