我正在尋找一種在我的spring安全應用中成功登錄後包含警告頁面的方法。警告頁面將顯示一條消息給已成功登錄的用戶,按「是」他們同意條款和條件bla bla ...我想確保他們不能訪問任何資源,除非他們點擊「是」。成功登錄後的Spring Security隱私策略消息
我該如何將其包含在我的旅程中?如果有幫助,我已經實現了一個自定義成功處理程序。
提前致謝。
我正在尋找一種在我的spring安全應用中成功登錄後包含警告頁面的方法。警告頁面將顯示一條消息給已成功登錄的用戶,按「是」他們同意條款和條件bla bla ...我想確保他們不能訪問任何資源,除非他們點擊「是」。成功登錄後的Spring Security隱私策略消息
我該如何將其包含在我的旅程中?如果有幫助,我已經實現了一個自定義成功處理程序。
提前致謝。
所以這個解決方案其實很簡單。不幸的是,花了幾天的時間試圖找到最簡單的解決方案。
我做本質是什麼:在我的自定義UserDetailService
類,我推翻了createUserDetails
方法,並設置combinedAuthorities
是:
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new GrantedAuthorityImpl("ROLE_NEEDS_TO_ACCEPT_POLICY"));
combinedAuthorities = authorities;
因此,在這一刻,這是他們唯一的角色,即它們不是活得無權訪問我的spring security xml中映射的任何其他資源。
在我的自定義成功處理程序中,我將它們轉發到/policy
,這可以由角色ROLE_NEEDS_TO_ACCEPT_POLICY
的用戶看到,該用戶被映射到控制器,該控制器返回一個jsp以便他們接受/拒絕條款和條件等。
如果他們點擊是,他們的迴應將被捕獲在同一控制器的post方法中,然後加載他們的實際角色並授予他們。
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(auth.getAuthorities());
authorities.add(new GrantedAuthorityImpl('FETCH_ACTUAL_FROM_ROLES_TABLE'));
Authentication newAuth = new UsernamePasswordToken(auth.getPrincipal(),auth.getCredentials(),authorities)
SecurityContextHolder.getContext().setAuthentication(newAuth);
就是這樣......希望這有助於某人。
這將是一個選擇實施它的問題。
您可以通過創建UserDetailsService
的自定義實現來完成此操作。該接口只有一個方法,即loadUserByUsername
,它返回UserDetails
的實例,它又是Spring Security的一個接口。通過實施UserDetails
接口到您的用戶POJO /實體,您可以訪問一些有用的消息,這些消息可以檢查用戶是活動的還是啓用的或者憑證未過期等。看看javadoc。從那裏你可以處理這個用戶已經接受條款和條件或不。
另一種方法是創建自定義SpEL來檢查用戶是否接受了術語。
我已經實現了一個自定義的UserDetailsService,並可以檢查用戶是否啓用,憑證過期等等......我也有成功和失敗的處理程序,我檢查這些字段的狀態並通過拋出的異常CredentialsExpiredException等,我轉發用戶到正確的觀點。 但是,這並不能幫助我解決我的情況,因爲這意味着在執行身份驗證檢查時拋出一個異常,並始終將我的故障轉移到我的失敗處理程序...... – Mukhtar