spring security3 实现踢出在线用户

Refer from http://blog.csdn.net/yangxuan0261/article/details/10014111


在spring security中有个 SessionRegistryImpl 的类,实现了 SessionRegistry 接口,这个实现类里有session的具体信息。

我实现踢出功能用户功能就是比对已注册的session的用户的用户名,比对成功则调用isExpired() 让其session过期,当用户再次访问时就会跳转到session timeout的页面。


下面直接贴代码

[java]  view plain  copy
  1. private SessionRegistry sessionRegistry;  
  2.   
  3.     @Resource(name = "sessionRegistry")<span style="white-space:pre">       //spring注入这个实现类  
  4.     public void setSessionRegistry(SessionRegistry sessionRegistry) {  
  5.         this.sessionRegistry = sessionRegistry;  
  6.     }  
  7.   
  8.     @RequestMapping(value = "/admin/kickoutUser.do")  
  9.     @ResponseBody  
  10.     public String kickoutUser(@RequestParam(value = "username") String username) {  
  11.         System.out.println("kick out : " + username);  
  12.         List<Object> objects = this.sessionRegistry.getAllPrincipals();  
  13.         for (Object o : objects) {  
  14.             Users user = (Users) o;  
  15.             if (user.getUsername().equals(username)) {  
  16.                 List<SessionInformation> sis = this.sessionRegistry  
  17.                         .getAllSessions(o, false);  
  18.                 if (sis != null) {  
  19.                     for (SessionInformation si : sis) {  
  20.                         si.expireNow();  
  21.                         System.out  
  22.                                 .println(si.isExpired() ? "yes,  session be expired"  
  23.                                         : "no yet,session still active");  
  24.                         // this.sessionRegistry.removeSessionInformation(si.getSessionId());<span style="white-space:pre">  </span>  
  25.                         System.out.println("---" + username  
  26.                                 + "---have be kick out!");  
  27.                     }  
  28.                 }  
  29.                 return "success";  
  30.             }  
  31.         }  
  32.         System.out.println("no one call ---" + username + "---login");  
  33.         return "error";  
  34.     }</span>  


当踢出用户后,用户要有动作跳转到session timeout页面后,你在刷新一次当前所有在线用户才会看不到你所踢出的用户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值