spring security3.x学习(23)_session管理和session监听

本文为转载学习

原文链接:http://blog.csdn.net/dsundsun/article/details/11947097

再看一下session的管理

spring security3.x学习(23)_session管理和session监听_第1张图片

我们只需要在http中配置session-management就可以了。那我们仔细看一下这个标签吧

session-fixation-protection是为了防止固化攻击的。

spring security3.x学习(23)_session管理和session监听_第2张图片

一般来说我们会配置成migrateSession的。 这个比较保险而且好用。

再看一下spring security是如何对session进行并发控制的。

<http auto-config="true" use-expressions="true">
<!-- ... -->
  <session-management>
    <concurrency-control max-sessions="1"/>
  </session-management>
</http>

这是让当前这个session的控制量最大是1,这个还是不够的,

我 们 需 要 在 web.xml 描 述 文 件 中 配 置 中 使 得o.s.s.web.session.HttpSessionEventPublisher生效,这样servelt 容器将会通知Spring  Security session生命周期的事件(通过HttpSessionEventPublisher)。

<listener>
  <listener-class> 
    org.springframework.security.web.session.HttpSessionEventPublisher  
  </listener-class>
</listener>

书中提到了这样的一段话:

Session并发控制使用o.s.s.core.session.SessionRegistry来维护一个活跃HTTP  session的列表而认证过的用户与其进行关联。当session创建或过期时,注册表中会实时进行更新,基于HttpSessionEventPublisher发布的session 生命周期事件来跟踪每一个认证用户的活动session的数量

spring security3.x学习(23)_session管理和session监听_第3张图片

接下来我们就可以验证一下了:

如同验证session固化攻击那样,我们需要访问两个web浏览器。按一下的步骤:
1.  在IE 中,以guest用户登录;
2.  接下来,在Firefox中,以相同的用户(guest)登录;
3.  最后,返回到IE 中,做任何的动作都可以。你会发现有一个信息提示你的session
已经过期了。

还可以设置他的session过期重定向地址。

<session-management>
    <concurrency-control max-sessions="1" expired-url= "/login.do?error=expired"/>
</session-management>

在回忆一下刚才说过的SessionRegister么。 肯定能从中获取一些信息。

      for (Object principal : principals) {
               List<SessionInformation> sessionInformationList = sessionRegistry.getAllSessions(principal, false);
               for(SessionInformation sessionInfo : sessionInformationList){
                    System.out.println(sessionInfo.getPrincipal());
               }
          }

看一下都可以从sessionInformation中获取什么信息:

spring security3.x学习(23)_session管理和session监听_第4张图片

看到了,我们可以获取User的信息.

这里有个方法我们需要查一下api:

spring security3.x学习(23)_session管理和session监听_第5张图片

这样一看,挺有意思了,呵呵。又进步一点了。。


你可能感兴趣的:(SpringSecurity)