0

我正在尋找一種在我的spring安全應用中成功登錄後包含警告頁面的方法。警告頁面將顯示一條消息給已成功登錄的用戶,按「是」他們同意條款和條件bla bla ...我想確保他們不能訪問任何資源,除非他們點擊「是」。成功登錄後的Spring Security隱私策略消息

我該如何將其包含在我的旅程中?如果有幫助,我已經實現了一個自定義成功處理程序。

提前致謝。

回答

0

所以這個解決方案其實很簡單。不幸的是,花了幾天的時間試圖找到最簡單的解決方案。

我做本質是什麼:在我的自定義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); 

就是這樣......希望這有助於某人。

0

這將是一個選擇實施它的問題。

您可以通過創建UserDetailsService的自定義實現來完成此操作。該接口只有一個方法,即loadUserByUsername,它返回UserDetails的實例,它又是Spring Security的一個接口。通過實施UserDetails接口到您的用戶POJO /實體,您可以訪問一些有用的消息,這些消息可以檢查用戶是活動的還是啓用的或者憑證未過期等。看看javadoc。從那裏你可以處理這個用戶已經接受條款和條件或不。

另一種方法是創建自定義SpEL來檢查用戶是否接受了術語。

+0

我已經實現了一個自定義的UserDetailsS​​ervice,並可以檢查用戶是否啓用,憑證過期等等......我也有成功和失敗的處理程序,我檢查這些字段的狀態並通過拋出的異常CredentialsExpiredException等,我轉發用戶到正確的觀點。 但是,這並不能幫助我解決我的情況,因爲這意味着在執行身份驗證檢查時拋出一個異常,並始終將我的故障轉移到我的失敗處理程序...... – Mukhtar

相關問題