2013-08-23 128 views
0

目前的做法在我的Java SE應用程序是(一旦被認證)店面用戶名的系統屬性,我的理解可能有安全隱患的Java SE - 存儲當前登錄用戶的詳細信息

每當動作試圖執行需要特定角色的用戶名,該用戶名用於調用數據庫以檢查給定用戶是否具有角色。

我寧願預先加載所有角色 - 然後檢查某些「用戶」對象是否允許訪問。儘管如此,所有這些都需要以非常可控的方式完成。

有沒有一個標準的方法/框架呢?考慮到我已經過身份驗證,只想存儲用戶的詳細信息。 將當前登錄的用戶存儲爲Singleton是否是一種明智的方法來處理此問題?

回答

0

您可以使用JAAS在您的應用程序中進行身份驗證和授權。此框架適用於所有Java應用程序(Web,Standalone,Java EE等)

另一個選項可能是Spring Security。在Spring Security中,有類SecurityContextHolder,您可以在用戶通過身份驗證後存儲身份驗證狀態(角色)。稍後,這可用於在嘗試訪問任何操作時驗證用戶角色。這不應該是Web應用程序,您可以在Java SE中使用它。

List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
authorities.add(new RestUserAuthrity("ROLE_USER")); 
CustomAuthenticationToken authenticationToken = new CustomAuthenticationToken(authorities); 
SecurityContextHolder.getContext().setAuthentication(authenticationToken); 

在方法調用期間或您想檢查角色的位置。只需從SecurityContextHolder獲取角色並驗證適當的角色即可。

+0

JAAS *在Java EE中不是普遍適用的。這是代碼庫授予的非常低級別的安全框架。 –

+0

@MikeBraun,什麼是java EE標準安全性?我建議你深入瞭解JAAS,看看它提供了什麼。 JAAS確實沒有被廣泛使用。 –

+0

我已經深入瞭解JAAS。這與Java EE不匹配。當您登錄到JAAS登錄模塊時,Java EE不知道這一點。 JAAS中的主題是一個主體集合,沒有對Java EE角色和用戶主體的標準映射。您可以通過JASPIC將JAAS集成到Java EE中,但這會將JAAS減少爲相當愚蠢的名稱/角色提供者。 –

-1

我建議你使用spring框架進行會話管理以及spring給你當前登錄的用戶列表,然後你就可以存儲登錄的用戶。

+1

我認爲當他所需要的只是簡單的認證功能時,Spring就完全過於臃腫。 –

+0

但如果你使用彈簧安全,這將是非常簡單的 – pravin

相關問題