![](/img/trans.png)
[英]Spring Security : Redirecting to login page if the authentication failed
[英]Grails Spring Security failed login not redirecting to login view
具有自定義登錄,其中需要用戶名+密碼+組織才能登錄。 從身份驗證的角度來看,登錄成功和登錄失敗情況都有效,但登錄失敗並沒有按預期重定向到登錄頁面。 相反,它顯示了一個 401 錯誤頁面,並帶有如下消息:
HTTP 狀態 401 - 身份驗證失敗:沒有匹配的帳戶
我應該怎么做才能更正重定向以顯示登錄頁面而不是 HTTP 狀態頁面?
我在登錄失敗時看到的 URL 是:
localhost/myapp/j_ehrserver_security_check
這是我的登錄實現代碼:
解決了添加與@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')
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.