在Spring SecurityContextHolder中存储有关guest的信息

时间:2013-02-22 20:47:28

标签: spring session servlets

我想添加来宾功能:这意味着访客是与用户一样的对象,但不会保留,并且ROLE_GUEST代替ROLE_USER。我想在会话中存储一个guestID,所以当客人做某事时,我可以检索客人并以客人的名义采取行动。如果我想保留Stateless Servlet,我将如何添加此信息。

我对注册用户的当前登录信息如下:

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

我正在寻找与此类似的东西,或者直接在SecurityContextHolder.getContext()中的某处添加访客名称的方法。我可以获得spring Session对象或其他会话来存储此信息吗?

我没有使用Spring MVC

1 个答案:

答案 0 :(得分:0)

您应该使用框架提供的anonymous authentication mechanism而不是假的UsernamePasswordAuthenticationToken。您可以使用安全命名空间配置它:

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

这将导致AnonymousAuthenticationFilter将带有提供的名称和角色的AnonymousAuthenticationToken放入安全上下文中。 (当然,只有在UsernamePasswordAuthenticationFilter等其他过滤器无法对用户进行身份验证时才会发生这种情况。)