您的位置:首页 > 编程语言 > PHP开发

SecurityContextPersistenceFilter

2015-10-14 16:31 645 查看

SecurityContextPersistenceFilter

        让我们来看一下FilterChainProxy所使用的SecurityContextPersistenceFilter如何配置,一个最基本的配置只需要它的bean自身即可:

<bean id="securityContextPersistenceFilter"
class="org.springframework.security.web.context.SecurityContextPersistenceFilter"/>
        跟我们之前了解到的一样,这个filter有两个主要的任务,第一,它负责在HTTP请求之中保存SecurityContext内容,并且当请求完毕之后清理SecurityContextHolder;第二,最重要的功能是,清理ThreadLocal局部变量,因为一个线程可能会被代替并被放入线程池中,这样一些用户可以访问到security的内容,这个线程可能会在持有坏的凭证的时候可以继续执行一些操作。

SecurityContextRepository

        从Spring Security3.0开始,装载并存储security上线文的任务交给了独立的接口:
public interface SecurityContextRepository {
SecurityContext loadContext(HttpRequestResponseHolder requestResponseHolder);
void saveContext(SecurityContext context, HttpServletRequest request,
HttpServletResponse response);
}
        HttpRequestResponseHolder是一个与接收的请求和相应对象有关的简单容器,可以用被封装的类来替代他们,返回的内容将被传递到过滤器链。

        默认的实现是HttpSessionSecurityContextRepository,它将security上下文保存为HTTPSession属性。这种实现的最重要的配置参数是allowSessionCreation,默认是true,这样当需要一个新的session来保存被认证用户的信息时,就会新创建一个session(当认证已经完成或者security上下文已经改变时,它不会新创建一个session)。如果你不希望创建一个新的session,可以将属性设置为false。
<bean id="securityContextPersistenceFilter"
class="org.springframework.security.web.context.SecurityContextPersistenceFilter">
<property name='securityContextRepository'>
<bean class='org.springframework.security.web.context.HttpSessionSecurityContextRepository'>
<property name='allowSessionCreation' value='false' />
</bean>
</property>
</bean>
        或者你可以创建一个NullSecurityContextRepository,的实例,一个“null object”的实现,这样即使在请求期间session一被创建,也可以阻止security上下文被存储。

        参考资料来自《Spring Security Reference Documentation(3.1)》,下载地址:http://download.csdn.net/detail/u010009900/9169039
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息