存储信息
问题描述:
我想补充的客人功能:这意味着客人是像用户对象,但不持久,并有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
。
答
而不是假的UsernamePasswordAuthenticationToken
你应该使用框架提供的anonymous authentication mechanism。您可以使用安全命名空间进行配置:
<security:http ....>
....
<security:anonymous username="guest" granted-authority="ROLE_GUEST"/>
</security:http>
这将导致AnonymousAuthenticationFilter
将一个AnonymousAuthenticationToken
与所提供的名称和角色到安全范围内。 (当然,只有在UsernamePasswordAuthenticationFilter
等其他过滤器无法对用户进行身份验证时才会发生这种情况。)
在此配置中,guest虚拟机的名称已修复,并且无法区分guest虚拟机。我正在寻找一种方法将独特的客人姓名附加到他们身上。 – Vjeetje 2013-02-22 21:13:05
如何获取未经身份验证的请求的唯一名称? – zagyi 2013-02-22 21:15:47
我有一个用户管理器有一个访客列表,一个新的名字创建如下:String guestName =“guest”+ random.Int();如果guest虚拟机名称已在列表中,则尝试使用另一个guest虚拟机名称。从列表中删除早于24h的客人名称。 我实际上正在寻找的方法是将guestName附加到会话,并检测会话何时中断以删除guestName。但我不知道如何... – Vjeetje 2013-02-22 21:18:50