javaEE Filter, 过滤器

编写步骤:
1)编写一个过滤器的类实现Filter接口
2)实现接口中尚未实现的方法 (着重实现doFilter方法)
3)在web.xml中进行配置 (主要是配置要对哪些资源进行过滤)

Filter的主要作用:
1)公共代码的提取
2)可以对request和response中的方法进行增强(装饰者模式/动态代理)
3)进行权限控制


MyFilter(过滤器,实现Filter接口):

package com.xxx.web.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.HttpSession;


public class MyFilter implements Filter{
	
	@Override
	//Filter创建的时候执行init方法  (Tomcat服务器启动时,创建filter)
	public void init(FilterConfig filterConfig) throws ServletException {
		//1、获得web.xml中filter 的名称<filter-name>QuickFilter1</filter-name>
		System.out.println(filterConfig.getFilterName());
		//2、获得当前filter的初始化参数
		System.out.println(filterConfig.getInitParameter("aaa"));
		//3、获得servletContext
		filterConfig.getServletContext();
		
		System.out.println("init ....");
	}

	@Override
	//doFilter是Filter的核心过滤的方法
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request; // 如果要使用HttpServletRequest的私有方法,必须进行类型强转。
		HttpSession session = req.getSession();  // 强转成HttpServletRequest类型,才能获取session对象。
		
		//放行请求
		chain.doFilter(request, response);  // chain过滤器链对象。 (多个过滤器,形成过滤器链)
	}

	@Override
	//Filter对象销毁的时候执行destory方法。 (Tomcat服务器正常关闭时,filter销毁)
	public void destroy() {
		System.out.println("destroy...");
	}

}
web.xml(配置文件,配置过滤器):
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>MyWeb11</display-name>
  
  <filter>   <!-- 过滤器配置 -->
  	<filter-name>MyFilter</filter-name>
  	<filter-class>com.xxx.web.filter.MyFilter</filter-class>
  </filter>
  <filter-mapping>   <!-- 多个过滤器的过滤顺序由filter-mapping的配置顺序来决定 -->
  	<filter-name>MyFilter</filter-name>
  	<url-pattern>/*</url-pattern>  <!-- 也可以通过<servlet-name>xxx</servlet-name>替代url-pattern,来指定要过滤的资源 -->
  	<!-- <dispatcher>REQUEST</dispatcher> -->   <!-- 配置访问方式。REQUEST(默认),FORWARD,INCLUDE,ERROR -->
  </filter-mapping>
  
</web-app>


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80943457
今日推荐