Java 2种方法实现简单的session超时登出

本文介绍如何使用拦截器和Shiro进行用户状态检测,通过设置session值和配置spring-mvc.xml,实现对未登录用户的操作拦截,提高代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  

 1、使用拦截器 

 

       用户每次和后台交互,如果用户长时间未操作,则需要检测用户的登录状态,这样的场景已经是再正常不过了。

  传统的做法可以在每个controller里先判断user的状态,然后再执行业务操作,但这样比较代码不够精简,优雅。

  可以使用最简单的拦截器,如:

  

public class LoginInterceptor extends HandlerInterceptorAdapter {

    private List<String> IGNORE_URI;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     

        HttpSession session = request.getSession();
        if(session != null && session.getAttribute("login_status") != null){ 
            return true;
        }else{
            response.sendRedirect("/user/login?timeout=true");
            return false;
        }
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        super.postHandle(request, response, handler, modelAndView);
    }
  
  
  public List<String> getIGNORE_URI() {
return IGNORE_URI;
}

  public void setIGNORE_URI(List<String> IGNORE_URI) {
this.IGNORE_URI = IGNORE_URI;
}

   }

  只要我们在登录的时候给session设个值,每次进入方法的时候,都先会执行拦截器中的preHandle()方法,如果session已经失效则重定向到登录页面。

 

     spring-mvc.xml的配置:

 

<mvc:interceptors>
        <!-- 登陆拦截器,负责拦截未登录的操作 -->
        <mvc:interceptor>
            <!-- 需要拦截的地址 -->
            <mvc:mapping path="/**"/>
            <!-- 需要排除拦截的地址 -->
            <mvc:exclude-mapping path="/static/**"/>
            <bean id="loginInterceptor" class="com.amayadream.webchat.interceptor.LoginInterceptor">
                <property name="IGNORE_URI">
                    <list>
                        <value>/user/login</value>
                        <value>/user/logout</value>
                    </list>
                </property>
            </bean>
        </mvc:interceptor>
    </mvc:interceptors>

 

   2、使用Shiro的session会话管理

      具体的使用可以看我的另一篇博客:https://www.cnblogs.com/qsymg/p/9836122.html

  

 

  

转载于:https://www.cnblogs.com/qsymg/p/9895715.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值