AcegiSecurity学习记录(一)

来源:互联网 发布:qq飞车剃刀改了数据吗 编辑:程序博客网 时间:2024/05/07 15:34

  org.acegisecurity.context.HttpSessionContextIntegrationFilter

  使用从 HttpSession中取出的信息组装SecurityContextHolder对象。SecurityContextHolder负责与当前执行线程提供的SecurityContext对象结合。SecurityContext定义了与当前执行线程关联的最小的安全信息。HttpSession将被问询以取出在请求期间将被保存在SecurityContextHolder中的SecurityContext对象。当请求处理结束,所有的对SecurityContextHolder的更新将被存回HttpSession中。


    如果从HttpSession中无法得到一个正确的SecurityContext对象,那么一个新的SecurityContext对象将被创建。被创建的对象将是setContext(Class)方法设定的类的一个实例。默认创建的对象将是SecurityContextImpl。


    如果HttpSession并不存在,那么HttpSession不会被创建。除非当前的SecurityContextHolder持有的对象不是由setContext(Class)方法指定的新实例。这样做避免了不必要的HttpSession的创建,却可以自动保存SecurityContextHolder的改变。这个规则有一个例外,即如果forceEagerSessionCreation属性为true,那么HttpSession间总是被创建而忽视最小化会话的逻辑。由于这样做会大量消耗资源,因此不被推荐。


    对每个请求此过滤器仅执行一次。如果无论何时以何种理由,都不需要创建HttpSession,那么setAllowSessionCreation属性应设定为false。只有你确定需要保证服务器端内存,且所还有的使用SecurityContextHolder的类不需要在两次请求间维持SecurityContext时才能这样做。记住,如果forceEagerSessionCreation为true,则allowSessionCreation也必须为true。否则,将在启动时报错。
此过滤器必须在所有的认证处理机制前执行。认证处理机制在执行时需要SecurityContextHolder包含一个正确的SecurityContext对象。

原创粉丝点击