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无法登录

Grails 3 和 Spring Security:当用户未登录时返回 401

在 Spring Security 登录期间设置 Grails/Spring Locale - 如何?