zoukankan      html  css  js  c++  java
  • shiro退出登陆清空缓存实现

      上一篇介绍了使用springmvc集成shiro登陆过程(http://www.cnblogs.com/nosqlcoco/p/5579081.html),通过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" />
  • 相关阅读:
    区别@ControllerAdvice 和@RestControllerAdvice
    Cannot determine embedded database driver class for database type NONE
    使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
    Markdown语法笔记
    Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    Mysql 查看连接数,状态 最大并发数(赞)
    OncePerRequestFilter的作用
    java连接MySql数据库 zeroDateTimeBehavior
    Intellij IDEA 安装lombok及使用详解
    ps -ef |grep xxx 输出的具体含义
  • 原文地址:https://www.cnblogs.com/jpfss/p/8377074.html
Copyright © 2011-2022 走看看