2013-02-22 217 views
1

我想補充的客人功能:這意味着客人是像用戶對象,但不持久,並有ROLE_GUEST而不是ROLE_USER。我想在會話中存儲一個guestID,所以當客人做某事時,我可以檢索客人並根據客人的名字採取行動。如果我想保留Stateless Servlet,我將如何添加此信息。存儲信息

我的註冊用戶當前的登錄是這樣的:

auth = new UsernamePasswordAuthenticationToken(username, password, auths); 
Authentication result = authManager.authenticate(auth); 
SecurityContextHolder.getContext().setAuthentication(result); 

我在尋找任何類似這樣還是有辦法在SecurityContextHolder.getContext直接添加客人姓名的地方()的東西。我是否可以在彈簧Session對象或其他會話中存儲此信息?我不使用Spring MVC

回答

0

而不是假的UsernamePasswordAuthenticationToken你應該使用框架提供的anonymous authentication mechanism。您可以使用安全命名空間進行配置:

<security:http ....> 
    .... 
    <security:anonymous username="guest" granted-authority="ROLE_GUEST"/> 
</security:http> 

這將導致AnonymousAuthenticationFilter將一個AnonymousAuthenticationToken與所提供的名稱和角色到安全範圍內。 (當然,只有在UsernamePasswordAuthenticationFilter等其他過濾器無法對用戶進行身份驗證時纔會發生這種情況。)

+0

在此配置中,guest虛擬機的名稱已修復,並且無法區分guest虛擬機。我正在尋找一種方法將獨特的客人姓名附加到他們身上。 – Vjeetje 2013-02-22 21:13:05

+0

如何獲取未經身份驗證的請求的唯一名稱? – zagyi 2013-02-22 21:15:47

+0

我有一個用戶管理器有一個訪客列表,一個新的名字創建如下:String guestName =「guest」+ random.Int();如果guest虛擬機名稱已在列表中,則嘗試使用另一個guest虛擬機名稱。從列表中刪除早於24h的客人名稱。 我實際上正在尋找的方法是將guestName附加到會話,並檢測會話何時中斷以刪除guestName。但我不知道如何... – Vjeetje 2013-02-22 21:18:50