`

过滤器 filter 和 监听器 listener

阅读更多

一、 filter

web.xml

<filter>
  	<filter-name>SessionInvalidate</filter-name>
  	<filter-class>com.sysoft.baselib.web.SessionCheckFilter</filter-class>
  	<init-param>
  		<param-name>checkSessionKey</param-name>
  		<param-value>APP_SESSION_TOKEN</param-value>
  	</init-param>
  	<init-param>
  		<param-name>redirectURL</param-name>
  		<param-value>/sessionInvalidate.jsp</param-value>
  	</init-param>
  	<init-param>
  		<param-name>notCheckURLList</param-name>
  		<param-value>/login.jsp,/logon.do,/logout.jsp,/Index2/index.jsp,/sessionInvalidate.jsp,/Index2/maintop.jsp,/html.jsp</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>SessionInvalidate</filter-name>
  	<url-pattern>*.do</url-pattern>  	
  </filter-mapping>
   <filter-mapping>
  	<filter-name>SessionInvalidate</filter-name>
  	<url-pattern>*.jsp</url-pattern>  	
  </filter-mapping>
 
package com.sysoft.baselib.web;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

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;
/**      
* 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面       
* 配置参数            
* checkSessionKey 需检查的在 Session 中保存的关键字      
* redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath       
* notCheckURLList 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath  
*/    
public class SessionCheckFilter implements Filter {
	protected FilterConfig filterConfig = null;
	private String redirectURL = null;
	private Set notCheckURLList = new HashSet();
	private String sessionKey = null;

	public void doFilter(ServletRequest servletRequest,
			ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;

		HttpSession session = request.getSession();
		if (sessionKey == null) {
			filterChain.doFilter(request, response);
			return;
		}
		if ((!checkRequestURIIntNotFilterList(request))
				&& session.getAttribute(sessionKey) == null) {
			response.sendRedirect(request.getContextPath() +redirectURL);
			return;
		}
		filterChain.doFilter(servletRequest, servletResponse);
	}

	public void destroy() {
		notCheckURLList.clear();
	}

	private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) {
		String uri = request.getServletPath()
				+ (request.getPathInfo() == null ? "" : request.getPathInfo());
		String temp = request.getRequestURI();
		temp= temp.substring(request.getContextPath().length()+1);
		//System.out.println("是否包括:"+uri+";"+notCheckURLList+"=="+notCheckURLList.contains(uri));
		return notCheckURLList.contains(uri);
		
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		redirectURL = filterConfig.getInitParameter("redirectURL");
		sessionKey = filterConfig.getInitParameter("checkSessionKey");

		String notCheckURLListStr = filterConfig
				.getInitParameter("notCheckURLList");
		if(notCheckURLListStr != null){
			System.out.println(notCheckURLListStr);
			String[] params = notCheckURLListStr.split(",");
			for(int i=0;i<params.length;i++){
				notCheckURLList.add(params[i].trim());
			}
		}
		
	}
}
 

 

 

二、 listener

web.xml

 <listener>
		<listener-class>com.sysoft.syoa.listener.MyHttpSessionListener</listener-class>
	</listener>
 
package com.sysoft.syoa.listener;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.sysoft.baseform.process.outer.DateUtil;
import com.sysoft.baselib.database.JdbcManager;
import com.sysoft.web.util.SessionToken;
import com.sysoft.web.util.SessionTokenHelper;

public class MyHttpSessionListener implements HttpSessionListener {

	public void sessionCreated(HttpSessionEvent arg0) {
		// TODO 新建没关系的。不做任何处理
		
	}
	/**
	 * 如果session将要丢失,需要执行江苏的解锁动作。
	 */
	public void sessionDestroyed(HttpSessionEvent event) {
		HttpSession session = event.getSession();
		long createTimeLong = session.getCreationTime();
		Date date = new Date(createTimeLong);
		System.err.println("Session的创建时间:"+DateUtil.dateToString(date)+";失效时间:"+DateUtil.dateToString(new Date()));
		Object obj = session.getAttribute(SessionTokenHelper.TOKEN_NAME);
		if(obj instanceof SessionToken){
			//如果是这个对象才执行操作
			SessionToken token = (SessionToken)obj;
			String userId = token.getUserId();
			if(userId != null && !"".equals(userId)){
				System.err.println("失效的用户:"+userId);
				List sqls = new ArrayList();
				sqls.add("update js_fw a set a.curr_read_person='' where a.curr_read_person='"+userId+"'");
				sqls.add("update js_lw a set a.curr_read_person='' where a.curr_read_person='"+userId+"'");
				JdbcManager jdbc = new JdbcManager();
				boolean flag = jdbc.executeTrans(sqls);
				System.err.println("Session失效,解锁"+userId+"结果为:"+flag);
			}
		}
	}

}
 

 

 

 

 

 

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    过滤器Filter和监听器Listener

    过滤器Filter和监听器Listener

    过滤器filter和监听器listener的应用总结

    在Java Web开发中,过滤器...在阅读《过滤器filter和监听器listener的应用总结》这篇博客后,相信你对这两个概念会有更深入的认识。在实际工作中,根据具体需求灵活运用它们,可以大大提升应用的健壮性和用户体验。

    第7章 过滤器Filter和监听器Listener.ppt

    Java Web基础与实例教程的PPT,自己制作的PPT,将近400页,免费分享,童鞋们努力学习吧。

    关于监听器Listener和过滤器的小demo

    在这个"关于监听器Listener和过滤器的小demo"中,作者可能创建了一个简单的Web应用程序,用以演示如何使用监听器监听应用程序的事件,以及如何使用过滤器处理请求和响应。文件`day10.html`和`day10.md`可能是记录了...

    javaweb 监听器(Listener)和过滤器(Filter)

    javaweb 监听器(Listener)和过滤器(Filter)

    关于过滤器和监听器的使用模板

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。以下是关于这两个概念的详细说明。 **过滤器(Filter)** 过滤器是Servlet...

    过滤器和监听器的使用与区别

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。本篇文章将详细解释这两种技术的使用、配置及其区别。 首先,我们来了解过滤...

    listener和filter 监听器和过滤器的介绍以及简单使用(csdn)————程序.pdf

    在Java Web开发中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们分别承担着不同的职责。监听器主要用于监听应用程序中的特定事件,而过滤器则用于在请求处理之前和之后对请求和响应进行拦截,...

    JavaWebServlet+JSP+EL表达式+JSTL标签库+Filter过滤器+Listener监听器

    JavaWeb技术是构建基于Java平台的Web应用程序的重要框架,它包括了Servlet、JSP、EL表达式、JSTL标签库、Filter过滤器以及Listener监听器等多个关键组件。这些组件协同工作,使得开发者能够创建动态、交互式的Web...

    jsp/servlet中过滤器和监听器的区别

    在这些技术中,过滤器(Filter)和监听器(Listener)是两个关键的概念,它们在处理请求、响应以及管理应用程序状态时发挥着重要作用。下面将详细讲解这两者的区别。 1. **过滤器(Filter)** - **定义**:过滤器...

    javaweb_高级_过滤器_监听器

    在JavaWeb开发中,过滤器(Filter)和监听器(Listener)是两种非常重要的组件,它们能够帮助我们实现更精细的控制和管理应用程序的行为。本篇将详细介绍过滤器的原理、使用方法、映射配置以及实际应用案例。 ### 1...

    监听器访问计数过滤非法字符

    在IT行业中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们在Web应用程序中扮演着不可或缺的角色。本文将详细讲解如何利用监听器进行访问计数以及通过过滤器来过滤非法字符,以确保系统的安全性...

    servlet中的过滤器与监听器

    在Servlet技术中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们帮助开发者实现对请求和响应的拦截、处理以及管理应用程序的状态。 ### 1. Servlet过滤器 **过滤器** 是Servlet API提供的一种...

    Filter和Listener

    在Java Web开发中,Filter(过滤器)和Listener(监听器)是两个重要的概念,它们在Web应用程序的生命周期管理和请求处理流程中扮演着关键角色。理解它们的区别和应用场景对于构建高效、灵活的Web应用至关重要。 ##...

    过滤器和监听器教程(java)

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的生命周期。本教程将深入探讨这两个核心组件,以帮助开发者更好地理解和应用它们。 ...

    过滤器和监听器的使用

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的生命周期。过滤器主要负责对HTTP请求和响应进行拦截和处理,而监听器则用来监听和...

    过滤器和监听器收集.pdf

    本文将主要介绍Java Web开发中的两个重要组件:过滤器(Filter)和监听器(Listener)。这两种技术在处理HTTP请求和响应以及管理Web应用的状态时发挥着重要作用。过滤器和监听器是Java Servlet API的一部分,允许...

    过滤器和监听器的使用步骤

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的状态。以下是这两个概念的详细解释以及如何在实际项目中使用它们。 ### 过滤器...

    Filter过滤器和Listener监听器详解

    Filter过滤器和Listener监听器详解 Filter过滤器 Filter的简介 对资源的访问进行过滤,相当于小区的保安,进去要检查,出去还要检查。 Filter的使用 编写一个类,继承并实现javax.servlet.Filter。 package ...

    杂记(一):Listener、Filter和工具

    例如,使用Spring框架时,我们可以定义自定义的监听器和过滤器,并利用Spring的依赖注入特性,将它们与其他服务和组件连接起来。同时,开发工具如IDEA提供了方便的配置和调试功能,使得Listener和Filter的开发更加...

Global site tag (gtag.js) - Google Analytics