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

  

 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

时间: 2024-11-13 06:50:57

Java 2种方法实现简单的session超时登出的相关文章

[设计模式]两种方法实现简单工厂模式

<!--完整代码下载链接:点击下载完整代码示例--> 1.描述 在项目开发中经常会遇到根据不同的条件创建不同的对象,然后对该对象进行操作,一般都包括许多的switch -case分支如下: CBase* pBase(NULL); switch (type_variable) { case obj1: pBase = new CBaseDerivate1();break; case obj2: pBase = new CBaseDerivate2();break; ... case objN:

JDBC连接数据库的几种方法与简单解析

首先要知道jdbc:使用Java代码发送sql语句的技术就是jdbc技术.即jdbc是一个接口,用于不同的数据库(oracle.mysql.sqlserver..)的操作.使用jdbc发送sql语句的前提: 登录数据库服务器(连接数据库服务器) 数据库的IP地址 端口 数据库用户名 密码 JDBC的URL=协议名+子协议名+数据源名. a 协议名总是"jdbc". b 子协议名由JDBC驱动程序的编写者决定. c 数据源名也可能包含用户与口令等信息:这些信息也可单独提供. 几种常见的数

java几种常用设计模式简单示例

1.单例设计模式 所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生.具体实现步骤如下: (1) 将采用单例设计模式的类的构造方法私有化(采用private修饰). (2) 在其内部产生该类的实例化对象,并将其封装成private static类型. (3) 定义一个静态方法返回该类的实例. 示例代码如下: [java] view plaincopy class Singleton { private static Singlet

java 几种常见的简单设计模式

前言: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.用于解决特定环境下.重复出现的特定问题的解决方案.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的

交换变量的三种方法及简单分析

交换两个变量的思路主要有两种:借助或不借助临时变量.具体操作时又有以下三种简单算法: 1.借助临时变量的算法 #include <stdio.h> int main(void) { int a, b, t; scanf("%d%d", &a, &b); t = a; a = b; b = t; printf("a = %d, b = %d\n", a, b); return 0; } 2.不借助临时变量的算法1(通过加减运算) #incl

Qt 设置背景图片3种方法(简单,但值得仔细体会)

方法1. setStylSheet{"QDialog{background-image:url()"}}  //使用styleSheet 这种方法的好处是继承它的dialog都会自动设置背景,例如更换皮肤就是一个不错的选择方法2. QPalette pal; pal.setBrush(QPalette::Background,QBrush(QPixmap("")));            this->setPalette(pal);方法3.在paintEve

JAVA 两种方法实现多线程(继承Thread和实现Runnable接口)

1 package h14; 2 3 public class Demo { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 Thread cat = new Cat(); 11 cat.start(); 12 Runnable dog = new Dog(); 13 Thread t = new Thread(dog);

Hibernate中Session的几个方法的简单说明

Hibernate对普通JDBC的操作进行了轻量级的封装,使得开发人员可以利用Session对象以面向对象的思想来实现对关系数据库的操作. 一般通过Configuration对象读取相应的配置文件来创建SessionFactory,然后通过SessionFactory对象获取Session对象,获取Session对象之后,我们就可以相关数据的操作了. 下面来介绍一下Session对象的几种方法: 1.Session.save() Session.save(Object obj):把瞬时状态对象o

Spring Security3的四种方法概述

使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,     并分别实现Ac