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

在看一下session的管理

我们只需要在http中配置session-management就可以了。那我们仔细看一下这个标签吧
session-fixation-protection是为了防止固化攻击的.


一般来说我们会配置成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的数量。
"

看到上边那个session的监听机制,这里有一个很重要的累叫做SessionRegistry.我们通过这个类进行session的维护。HttpSessionEventPublisher监听每一个session声明周期然后通过ApplicationListenter给SessionRegistry,然后SessionRegistry就可以进行记录session了。(非常有意思的一个类,这个类里边我们肯定可以获取信息)。

接下来我们就可以验证一下了:
如同验证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中获取什么信息:

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

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值