java鬼混笔记:shiro 11、唯一登录和登录退出Bug
来源:互联网 发布:淘宝口罩属于什么类目 编辑:程序博客网 时间:2024/06/10 15:20
完整的项目下载路径(项目下载网上的hui框架来着,什么鬼文件都在里面,暂清除,所以很多):
http://download.csdn.net/download/u013845177/9992748
相关的lib包路径:
http://download.csdn.net/download/u013845177/9992728
这次的笔记是在运行程序时,发现一个问题,今天才有空处理。问题举例来讲吧:比如用户A第1次登录后,由于设置了唯一登录,用了Deque保存用户的sessionId,当用户A退出时, session是清空了,但是Deque中没有清空。第二次A再次登录,这时Deque又把sessionid放进去,这时Deque中sessionid 有两个,由于设置了唯一登录,这时要清空第1次登录的sessionid对应的session,但是第1次sessionid清空了,找不到了,所以报了session找不到,控制台红红的。。。
解决方案:自定义一个退出类,手动清空Deque。上代码...
package cn.common;import java.io.Serializable;import java.util.Deque;import java.util.LinkedList;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.apache.shiro.cache.Cache;import org.apache.shiro.cache.CacheManager;import org.apache.shiro.session.SessionException;import org.apache.shiro.subject.Subject;import org.apache.shiro.web.filter.authc.LogoutFilter;import cn.entity.User;public class LSLogoutFilter extends LogoutFilter {private Cache<String, Deque<Serializable>> cache;private CacheManager cacheManager;public CacheManager getCacheManager() {return cacheManager;}public void setCacheManager(CacheManager cacheManager) { this.cache = cacheManager.getCache("shiro-kickout-session");}@Overrideprotected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {Subject subject = getSubject(request, response);String redirectUrl = getRedirectUrl(request, response, subject);try {// 获取退出用户的信息User user = (User) subject.getPrincipal();LinkedList ll = (LinkedList) cache.get(user.getUserName());// 找到这个用户在缓存中的Dequeif(ll != null) {ll.removeLast();// 根据LinkedList机制,清空最后一个sessionid}cache.put(user.getUserName(), ll);// 放回去subject.logout();} catch (SessionException ise) {ise.printStackTrace();}issueRedirect(request, response, redirectUrl);return false;}}
接着在applicationContext-shiro.xml加入这个bean
<!-- 自定义退出功能 --><bean id="lSLogoutFilter" class="cn.common.LSLogoutFilter"> <property name="cacheManager" ref="cacheManager"/> </bean>
同时在<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">中加入红色的代码:
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager" /><property name="filters"><map><entry key="authc" value-ref="LSFormAuthenticationFilter" /><!-- 配置自定义的form过滤器 --><entry key="kickout" value-ref="kickoutSessionControlFilter"/><!-- 踢人 --><entry key="logout" value-ref="lSLogoutFilter"/><!-- 退出 --></map></property><!-- 没有登录就跳到这 --><property name="loginUrl" value="/login.do" /><!-- successUrl认证成功后跳转的url,去掉,因为实际中,比如successUrl对应的是A页,我在访问C页面时,有一个功能是要登录才可以操作的,如果我配置了successUrl,那么我登录成功之后会跳转A页面,然后我再各种点点点才回到C页面,这就很蛋疼了,如果我没配置 successUrl,那么在登录之后,shiro会自动跳转到上一个url,也是登录页面前一个url,那就是C页面的url,也就是C页面跳转到登录页面后,成功登录后直接返回到C页面,我就可以继续在C页面做事了--><!-- <property name="successUrl" value="index.do"/> --><property name="filterChainDefinitions"><value>/ssiupload/** = anon/up.jsp = anon<!-- logout.do shiro自己清空session -->/logout.do = logout<!-- 注意这里引用退出-->
阅读全文
0 0
- java鬼混笔记:shiro 11、唯一登录和登录退出Bug
- java鬼混笔记:shiro 10、在线用户、踢人下线、唯一登录
- java鬼混笔记:shiro 6、shiro和spring整合、数据库方式认证登录
- java鬼混笔记:shiro 1、基本ini配置文件的登录认证
- java鬼混笔记:shiro 9、缓存授权,免重新登录更新用户权限
- 使用shiro进行登录和退出
- java鬼混笔记:java同父域的单点登录
- shiro控制用户唯一登录
- java鬼混笔记:shiro 7、shiro验证码功能
- shiro学习:shiro整合springweb项目实现用户登录和退出
- rails 登录和退出
- java鬼混笔记:shiro 2、自定义realm进行认证
- 唯一登录
- 登录和退出登录的操作逻辑
- java鬼混笔记:shiro 3、shiro下的散列操作(MD5,SHA-1)
- java鬼混笔记:shiro 4、shiro授权判断,基本ini配置
- java鬼混笔记:shiro 5、shiro授权判断,基本动态获取权限
- 【Rails学习笔记】登录和退出功能实现
- 作业帮的笔试
- jquery 一键复制文本到剪切板
- 【模板】gcd+lcm
- 我的加密数据
- 【POJ 1273 Drainage Ditches】 & 网络流 & Edmonds-Karp算法
- java鬼混笔记:shiro 11、唯一登录和登录退出Bug
- mybatis properties属性
- Jzoj1309 最长二重串
- python之numpy库学习常用函数(构建数据)
- 面试常考 TCP与UDP协议区别 TCP连接三次握手与四次握手
- 数据结构-栈的静态顺序存储表示-初始化压栈弹栈
- java基础——时间转换
- 在arcgis中若想保存一个数据的符号设置不变应该怎么做?
- SurfaceView的系列用法(未完)