存储信息

问题描述:

我想补充的客人功能:这意味着客人是像用户对象,但不持久,并有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等其他过滤器无法对用户进行身份验证时才会发生这种情况。)

+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