为匿名用户动态添加Principal / authority

时间:2009-11-09 02:51:40

标签: java spring struts2 spring-security

我正在使用spring security 2.x(+ spring + struts2),并希望在用户提交表单后动态地为用户启用添加权限。

我有一个受ROLE_USER保护的受保护目录(/ protected / dir /)

<sec:intercept-url pattern="/protected/dir/**" access="ROLE_USER, ROLE_ADMIN" />

哪位用户在登录后可以访问。

我希望通过向主体添加临时ROLE_TEMP(可能甚至不存在,因为用户尚未登录,因此我可能必须添加)来提交提交表单的用户(无需登录)对于securityContext也是如此)

我尝试访问SecurityContext并在我的控制器/操作类中添加新的Principal。但是我无法获得SecurityContext。 (我认为SecurityContext只能在自己的线程上运行,你无法传递它,这就是我获得NPE的原因)

那么这样做的最佳方式是什么?

请指教 感谢

1 个答案:

答案 0 :(得分:0)

支持匿名用户的一种方法是添加此过滤器:

/**
* Detects if there is no Authentication object in the SecurityContextHolder, 
* and populates it with one if needed.
*/
org.springframework.security.providers.anonymous.AnonymousProcessingFilter

过滤器具有此属性,该属性将强制过滤器在请求完成后删除匿名会话:

 public void setRemoveAfterRequest(boolean removeAfterRequest);