Grails Spring Security登录失败未重定向到登录视图
Posted
技术标签:
【中文标题】Grails Spring Security登录失败未重定向到登录视图【英文标题】:Grails Spring Security failed login not redirecting to login view 【发布时间】:2015-12-31 23:11:00 【问题描述】:拥有自定义登录,其中需要用户名 + 密码 + 组织才能登录。从身份验证的角度来看,登录成功和登录失败的情况都有效,但失败的登录没有按预期重定向到登录页面。相反,它显示 401 错误页面,并显示如下消息:
HTTP 状态 401 - 身份验证失败:没有匹配的帐户
我应该怎么做才能更正重定向以显示登录页面而不是 HTTP 状态页面?
我在登录失败时看到的 URL 是:
localhost/myapp/j_ehrserver_security_check
这是我的登录实现代码:
https://github.com/ppazos/cabolabs-ehrserver/tree/security/src/groovy/com/cabolabs/security https://github.com/ppazos/cabolabs-ehrserver/tree/security/src/java/com/cabolabs/security【问题讨论】:
我没有看到任何与 Spring Security 相关的配置。当您收到 401 响应时? 关于登录失败的问题。 试试这个@PabloPazos "401"(view:'/login')。 grails 支持错误页面重定向。见***.com/questions/6191860/…。希望对您有所帮助。 @VinayPrajapati 与此相关,有没有办法获取异常消息并将其作为 flash.message 发送到视图,以便我可以显示特定的身份验证失败反馈?抛出 Spring 代码和插件代码,找不到从我的过滤器中捕获 AuthenticationException 并将其转换为 401 错误的人。 我也找到了 flash.message 的解决方案,在答案编辑中。 【参考方案1】:解决了添加与@Vinay 建议的 401 HTTP 状态相对应的 URL 映射,但我使用控制器而不是视图:
"401"(controller:'login')
编辑
我找到了一个灵活的解决方案:
将 authenticationFailureHandler bean 配置到我自定义的 authFilter 中。调用 /login/authfail,然后处理 AuthenticationException 并将其转换为 flash.message,因此我可以向用户显示反馈。
由于所有来自 Spring 的依赖注入,这很难理解,但它确实有效!
现在我的 spring/resources.groovy 看起来像:
import com.cabolabs.security.AuthFilter
import com.cabolabs.security.AuthProvider
beans =
authProvider(AuthProvider)
passwordEncoder = ref("passwordEncoder") // from plugin
authFilter(AuthFilter)
authProvider = ref("authProvider")
authenticationManager = ref("authenticationManager")
sessionAuthenticationStrategy = ref('sessionAuthenticationStrategy')
authenticationSuccessHandler = ref('authenticationSuccessHandler')
authenticationFailureHandler = ref('authenticationFailureHandler')
rememberMeServices = ref("rememberMeServices")
requiresAuthenticationRequestMatcher = ref('filterProcessUrlRequestMatcher')
【讨论】:
以上是关于Grails Spring Security登录失败未重定向到登录视图的主要内容,如果未能解决你的问题,请参考以下文章
Grails 3 Spring Security 覆盖登录表单
Grails/Spring Security:无法使用新创建的用户登录
grails 3 spring security boot starter登录页面定制
Grails Spring Security Core无法登录