java shiro实现退出登陆清空缓存
程序员文章站
2024-03-07 10:51:08
上一篇介绍了使用springmvc集成shiro登陆过程,通过formauthenticationfilter过滤器获取到用户输入的账号密码。
shiro是一个被广泛使用...
上一篇介绍了使用springmvc集成shiro登陆过程,通过formauthenticationfilter过滤器获取到用户输入的账号密码。
shiro是一个被广泛使用的安全层框架,通过xml配置方式与spring无缝对接,用户的登陆/退出/权限控制/cookie等管理系统基础功能交给shiro来管理。
一般,在javaweb管理平台系统时,用户退出系统之前没需要清除用户数据和关闭连接,防止垃圾数据堆积,shiro提供了logoutfilter过滤器,我们可以继承logoutfilter,重写prehandle方法,实现清除缓存功能。
spring-shiro.xml:
<!-- 安全认证过滤器 --> <bean id="shirofilter" class="org.apache.shiro.spring.web.shirofilterfactorybean"> <property name="securitymanager" ref="securitymanager" /> <property name="loginurl" value="/b/login" /> <property name="successurl" value="/b" /> <property name="filters"> <map> <!--退出过滤器--> <entry key="logout" value-ref="systemlogoutfilter" /> </map> </property> <property name="filterchaindefinitions"> <value> /b/login = authc /b/logout = logout /b/** = user </value> </property> </bean>
当调用的路径匹配到/b/logout,会进入到systemlogoutfilter过滤器,systemlogoutfilter继承了logoutfilter,并重写了prehandle方法,在prehandle方法执行需要清空的数据。
@service public class systemlogoutfilter extends logoutfilter { @override protected boolean prehandle(servletrequest request, servletresponse response) throws exception { //在这里执行退出系统前需要清空的数据 subject subject = getsubject(request, response); string redirecturl = getredirecturl(request, response, subject); try { subject.logout(); } catch (sessionexception ise) { ise.printstacktrace(); } issueredirect(request, response, redirecturl); //返回false表示不执行后续的过滤器,直接返回跳转到登录页面 return false; } }
注意,需要通过@service注解,使用spring容器来管理,在spring-shiro.xml中配置shiro过滤器直接使用
<entry key="logout" value-ref="systemlogoutfilter" />
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Java中的代理模式详解及实例代码
下一篇: Java 线程池原理深入分析