Java Web实现session过期后自动跳转到登陆页功能【基于过滤器】
作者:jianyuerensheng 发布时间:2021-08-19 03:44:37
本文实例讲述了Java Web实现session过期后自动跳转到登陆页功能。分享给大家供大家参考,具体如下:
通过过滤器的方式实现 session过期后自动跳转到登陆页
过滤器只在与servlet规范2.3版兼容的服务器上有作用。如果你的Web应用需要支持旧版服务器,就不能使用过滤器。
一、建立基本过滤器
建立一个过滤器涉及下列五个步骤:
1)建立一个实现Filter接口的类SessionFilter 。这个类需要三个方法,分别是:doFilter、init和destroy。doFilter方法包含主要的过滤代码,init方法建立设置操作,而destroy方法进行清除。
2)在doFilter方法中放入过滤行为。doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,如下一步所述,此参数用来调用servlet或JSP页。
3)调用SessionFilter 对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
4)对相应的servlet和JSP页面注册过滤器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。
5)禁用激活器servlet。防止用户利用缺省servlet URL绕过过滤器设置。
源码如下:
package com.base.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.base.constants.SessionKeyConstants;
import com.mvc.entity.User;
public class SessionFilter implements Filter {
public void destroy() {
// 过滤器销毁,一般是释放资源
}
/**
* 某些url需要登陆才能访问(session验证过滤器)
*/
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
HttpSession session = request.getSession();
//判断session是否过期
if ((User) session.getAttribute(SessionKeyConstants.LOGIN) == null) {
String errors = "您还没有登录,或者session已过期。请先登陆!";
request.setAttribute("Message", errors);
//跳转至登录页面
request.getRequestDispatcher("/login.jsp").forward(request, response);
} else {
arg2.doFilter(request, response);
}
}
public void init(FilterConfig arg0) throws ServletException {
// 初始化操作,读取web.xml中过滤器配置的初始化参数,满足你提的要求不用此方法
}
}
二、在web.xml配置文件中进行配置
<!-- 设置session过期时间为30分钟 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!-- session过滤器配置相关 -->
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.base.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/contract/*</url-pattern>
<url-pattern>/user/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<!--在这种情况下,如果请求是以/contract/…或者/user/…开头的,并且是通过request dispatcher的forward方法传递过来或者直接从客户端传递过来的,则必须经过这个过滤器。-->
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
希望本文所述对大家java程序设计有所帮助。
来源:http://blog.csdn.net/jianyuerensheng/article/details/53157465


猜你喜欢
- 最近用到的一个日历控件,记录下,效果如图代码下载地址:点击打开链接布局文件<LinearLayout xmlns:android=&q
- 使用方法 首先在Github或者Gitee上面新建一个仓库复制仓库的链接用idea在本地新建一个demo项目点击菜单栏的VCS,按
- 简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它
- logback-classic 使用testCompile的打包今天使用gradle打包的时候logback-classic一直打包不进去。
- 线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组
- 前言一入 Android 深似海,相信很多 Android 开发者深有体会,Android 系统版本的碎片化,Android 硬件设备的多样
- 本文实例讲述了Java包装类原理与用法。分享给大家供大家参考,具体如下:产生:为了提高数据类型的的面向对象性,所以产生了包装类,包装类中有各
- 在Android中,在非主线程中更新UI控件是不安全的,app在运行时会直接Crash,所以当我们需要在非主线程中更新UI控件,那么就需要用
- 本文实例讲述了Android开发中应用程序分享功能。分享给大家供大家参考,具体如下:Intent shareIntent = new Int
- 现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个
- 1. 运行环境 Enviroment当 MyBatis 与不同的应用结合时,需要不同的事务管理机制。与 Spring 结合时,由 Sprin
- 声明式事务很方便,尤其纯注解模式,仅仅几个注解就能控制事务了思考:这些注解都做了什么?好神奇!@EnableTransactionManag
- java字符串如何进行比较?我们可以根据内容和引用来比较Java中的String。它用于身份验证(通过 equals() 方法)、排序(通过
- Json 是一个用于 Java 对象 和 Json 文本 相互转换的工具类。安装下载源码g
- 修改readme.txt文件如下:Git is a distributed version control system.Git is fr
- MybatisPlus代码生成器含XML所需依赖 <!--Mybatis-Plu
- 面试官:请问StringBuffer和StringBuilder有什么区别?这是一个老生常谈的话题,笔者前几年每次面试都会被问到,作为基础面
- 本文使用的开发环境是VS2017及dotNet4.0,写此随笔的目的是给自己及新开发人员作为参考,对于Join的用法说明如下:语法:publ
- 本文实例讲述了Java判断两个日期相差天数的方法。分享给大家供大家参考。具体如下:import java.util.Calendar;pub
- 一、前言在项目中,我们有一些公共的字段需要做修改如:gmt_create:创建时间creator_id:创建人gmt_modified:修改