Java: Filter 过滤器

发布时间 2023-08-21 00:27:48作者: 小白冲冲

创建一个Fileter只需要两步

1. 创建一个类,实现Filter接口

public class MyFilter1 implements Filter {
 
// 初始化方法 @Override public void init(FilterConfig filterConfig) throws ServletException {
 } // 执行过滤的方法 @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {   // 过滤请求   System.out.println("MyFiter1在请求到达servlet之前的代码处理");   // 传递过滤器, 跳转到下一个过滤器   filterChain.doFilter(servletRequest,servletResponse);   // 过滤响应   System.out.println("myFilter1在响应回到浏览器之前的代码处理"); } //销毁方法 @Override public void destroy() { } }

2. 配置Filter

2.1. 使用xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    ...

    <!--配置filter-->
    <filter> // 用于注册过滤器
        <filter-name>myfilter1</filter-name>
        <filter-class>com.bjsxt.filter.MyFilter1</filter-class>
    </filter>
    <filter-mapping> // 用于设置一个Filter 所负责拦截的资源
        <filter-name>myfilter1</filter-name>
        <!--通过请求的映射路径匹配拦截的资源-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

 

  • <filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。
  • <filter-class>元素用于指定过滤器的完整的限定类名。
  • <filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字
  • <url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)

2.2. 使用Bean配置

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean registFilter(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new MyFilter());
        registrationBean.addUrlPatterns("/*");
        registrationBean.setName("Filter1");
        registrationBean.setOrder(1);
        return registrationBean;
    }
}