javaEE Filter, 过滤器
程序员文章站
2022-06-23 18:36:07
...
编写步骤:
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>
下一篇: win32下的命令行集合
推荐阅读
-
Java基础之Filter的实例详解
-
php使用filter过滤器验证邮箱 ipv6地址 url验证
-
ES6数组新特性解析(map,filter,forEach,reduce)
-
布隆过滤器(bloom filter)及php和redis实现布隆过滤器的方法
-
详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)
-
Python中map,reduce,filter和sorted函数的使用方法
-
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
-
javaee学习路线(java做桌面应用程序)
-
在Vue methods中调用filters里的过滤器实例
-
MVC使用Controller代替Filter完成登录验证(Session校验)学习笔记5