在我的grails應用程序中,我通過編寫自定義auth成功處理程序(在resources.groovy中)來定製後期授權工作流程,如下所示。Grails Spring Security:使用目標URL登錄跳過post驗證工作流程
authenticationSuccessHandler (MyAuthSuccessHandler) {
def conf = SpringSecurityUtils.securityConfig
requestCache = ref('requestCache')
defaultTargetUrl = conf.successHandler.defaultTargetUrl
alwaysUseDefaultTargetUrl = conf.successHandler.alwaysUseDefault
targetUrlParameter = conf.successHandler.targetUrlParameter
useReferer = conf.successHandler.useReferer
redirectStrategy = ref('redirectStrategy')
superAdminUrl = "/admin/processSuperAdminLogin"
adminUrl = "/admin/processAdminLogin"
userUrl = "/admin/processUserLogin"
}
,你可以從最後三行在封閉上面,這取決於授予用戶的日誌,我重定向她到AdminController在其中創建一個自定義UserSessionBean和儲存中分離行動中的作用在會議中。
它工作正常的經常登錄的情況下這在我的應用程序是像這樣:
- 用戶通過任一
http://localhost:8080/my-app/
或http://localhost:8080/my-app/login/auth
- 她進入她的有效登錄ID和密碼,進行涉及到的應用程序。
- 考慮授予此用戶的角色,應用程序在內部訪問重定向到AdminController的MyAuthSuccessHandler。
- 的UserSessionBean通過延長
GormUserDetailsService
這是在上述流程中正確地訪問創建並存儲它在會話 - ,用戶被引導到應用程序主頁
我也寫一個自定義的MyUserDetailsService
。
問題方案:
考慮一個用戶直接訪問(在這種情況下,所述控制器被固定與@Secured
註解)受保護的資源的應用程序內。
- 用戶點擊
http://localhost:8080/my-app/inbox/index
- 應用重定向她
http://localhost:8080/my-app/login/auth
- 用戶輸入
- 用戶被引導到
http://localhost:8080/my-app/inbox/index
的MyAuthSuccessHandler
在這個過程中完全忽略了有效的登錄ID和密碼因此我的UserSessionBean不會導致進一步使用時出錯在訪問UserSessionBean的地方。
問題:
- 在問題的情況下,不應用跳過
MyAuthSuccessHandler
因爲有一個目標URL爲它在登錄時重定向到? - 即使目標URL存在,我們是否可以強制該進程始終通過
MyAuthSuccessHandler
? - 如果對2的回答爲否,是否還有其他方法可以創建UserSessionBean?
'conf.successHandler.alwaysUseDefault'設置爲'true'嗎? – GalmWing
我沒有改變它。它處於默認狀態。 –