apache shiro踢出用户和获取所有在线用户

13 篇文章 0 订阅
1 篇文章 0 订阅

apache shiro踢出用户:

产品要求用户只能在同一个地方登录,如果之前在其他机器或者浏览器上登录,讲之前登录帐号踢出。applicationContext-shiro.xml配置:

在默认的shiro配置上增加如下配置(本文假设你已经使用过apache shiro,并且已经使用shiro成功实现登录功能):


<bea id="sessionDAO" class="org.apache.shiro.session.mgt.eis.MemorySessionDAO"/>

<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">

<property name="sessionDAO" ref="sessionDAO"/>

</bean>

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

<property name="realm" ref="shiroDbRealm" />

<property name="cacheManager" ref="shiroCacheManager" />

<property name="sessionManager" ref="sessionManager" />

</bean>


然后在ShiroDbRealm中的认证方法中增加如下代码,代码主要目的就是根据当前登录名获取之前使用同样登录名登录后的session

@Autowired

private SessionDAO sessionDAO;

...

String loginName=token.getUsername();

Session currentSession = null;

Collection<Session> sessions = sessionDAO.getActiveSessions();

for(Session session:sessions){

if(loginName.equals(String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY))) {

session.setTimeout(0);//设置session立即失效,即将其踢出系统

break;

}

}

apache shiro获取所有在线用户:


Collection<Session> sessions = sessionDAO.getActiveSessions();

for(Session session:sessions){

System.out.println("登录ip:"+session.getHost());

System.out.println("登录用户"+session.getAttribute(DefaultWebContext.PRINCIPALS_SESSION_KEY));

System.out.println("最后操作日期:"+session.getLastAccessTime());

}

红色部分:MemorySessionDAO ,切记不能使用EnterpriseCacheSessionDAO,使用该类的时候,虽然也能起到踢出用户的作用,但是后登录的用户隔两三分钟就会session自动失效。


点击去我的个人站点查看原文


更多文章,欢迎关注俺的微信订阅号,每天一篇小笔记,每天提高一点点:

公众号:enilu123


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值