关于shiro同一帐号同一时刻多处登录问题
来源:互联网 发布:怎么做 数据质量管控 编辑:程序博客网 时间:2024/06/02 12:53
这段时间做项目遇到一个关于shiro登录的问题。同一帐号不能同时登录,如果同时登录的话前面一个人的session就失效。百转千回,因为shiro登录到权限控制没有任何问题,就把问题点转移到存储端。去检查redis,检查reids的配置相关,结果也没发现什么毛病。后来在网上查阅文章,多看了看shiro相关的东西。问题锁定在shiro控制同一用户不能在同一时刻多处登录,然后修改程序:
1.shiro配置文件一下代码,由配置文件去到shiroDbRealm:
<!-- Shiro's main business-tier object for web-enabled applications --><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"><property name="realm" ref="shiroDbRealm" /><property name="cacheManager" ref="cacheManager" /><!-- shiro session管理器 --> <property name="sessionManager" ref="sessionManager"></property> </bean><!-- 項目自定义的Realm, 所有accountService依赖的dao都需要用depends-on声明 --><bean id="shiroDbRealm" class="com.swm.web.service.system.ShiroDbRealm" /><!-- Shiro Filter --><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean" depends-on="rolesOrFilter"><property name="securityManager" ref="securityManager" /><property name="loginUrl" value="/login.html" /><property name="successUrl" value="/" /><property name="unauthorizedUrl" value="/unauthorized.html"></property><property name="filterChainDefinitions" value="#{myFilterChainService.getValue()}"/> <property name="filters"> <map> <entry key="rolesOrFilter" value-ref="rolesOrFilter" /> </map> </property></bean>
2.
if(loginUser.getLoginFlag().equals("1")){Subject currentUser = SecurityUtils.getSubject();Collection<Session> sessions = sessionManager.getSessionDAO().getActiveSessions();if(sessions != null && sessions.size()>0){for(Session session:sessions){ // 获得session中已经登录用户的名字PubUser mUser = (PubUser) session.getAttribute("LOGINUSER");if(mUser != null){String loginUsername = mUser.getLoginName();/*if(token.getUsername().equals(loginUsername)){//这里就把session清除, sessionManager.getSessionDAO().delete(session);}*/}}}Session session = currentUser.getSession();session.setAttribute("LOGINUSER", loginUser);return new SimpleAuthenticationInfo(principal, loginUser.getPassword().substring(16), ByteSource.Util.bytes(salt), getName());}
注释中的代码就是问题的根本原因。校验当前session有没有相同用户名的,如果有就删除。
阅读全文
0 0
- 关于shiro同一帐号同一时刻多处登录问题
- 关于Apache shiro如何实现一个账户同一时刻只有一个人登录
- shiro 实现单用户登录,一个用户同一时刻只能在一个地方登录
- 利用Cache防止同一帐号重复登录
- 怎样在同一终端上多帐号登陆同一服务器?
- java同一用户登录问题
- Spring Security 一个账号同一时刻只能登录一次
- 我的shiro之旅: 十二 shiro 踢出用户(同一用户只能一处登录)
- Application变量在线列表和禁止同一帐号多次登录
- 利用Cache防止同一帐号重复登录 (c#)
- 利用Cache防止同一帐号重复登录 (c#)
- 关于同一PC同以浏览器多个用户登录
- 关于两个用户用同一浏览器不能同时登录同一网站的问题(session覆盖问题)
- 解决同一浏览器登录多个账户session共享问题
- 关于多指针指向同一块内存的问题!
- 关于同一服务器配置多个tomcat的问题
- 在ASP.NET中实现单点登录(不允许多用户使用同一帐号同时登录)
- 服务器 同一时刻最大在线人数
- java学习笔记-this关键字
- OS学习笔记——处理器调度1
- linux下的redis扩展安装以及使用
- spring配置文件中classpath与classpath* 的区别
- Android之路 7. 自定义控件
- 关于shiro同一帐号同一时刻多处登录问题
- 7天吃透这3大新兴互金黑科技,做稀缺型互金产品经理
- java10个常用小方法.字符串转日期,统计字符串出现频率等.
- CSS在移动端隐藏滚动条/自定义滚动条(scrollbar的各种属性)
- 2017产品经理大会|人人都是产品经理联合腾讯大学,携手16位大咖解码未来产品经理,5折抢门票
- 落地页设计有问题,无法达成转化,如何修改?
- Python编程:从入门到实践2
- 以我对你的了解,我反对你来互联网工作
- 用好这2种借口,立刻让用户心甘情愿买单