Filter(过滤器)

  1. 不使用SpringBoot

    Filter过滤类

1 public class FilterDemo implements Filter {
2 
3     @Override
4     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
5         System.out.println("开始拦截");
6         filterChain.doFilter(servletRequest,servletResponse);
7         System.out.println("拦截结束");
8     }
9 }

    代码说明:过滤类需要实现Filter接口,主要是一下三个方法的继承

//初始化方法
public default void init(FilterConfig filterConfig) throws ServletException {}
//实际过滤操作,主要是实现这个方法
public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException;
//Filter销毁方法
 public default void destroy() {}

    web.xml配置:

<!-- Filter,过滤器 -->
    <filter>
        <!-- filter名,随便起 -->
        <filter-name>AdminFilter</filter-name>
        <!-- 实现类所在目录 -->
        <filter-class>cn.daitao.filter.DemoFilter</filter-class>
        <!-- 初始化参数 -->
        <!-- 设置字符集,charset:UTF-8 -->
        <init-param>
            <!-- 参数名 -->
            <param-name>charset</param-name>
            <!-- 参数值 -->
            <param-value>UTF-8</param-value>
        </init-param>

        <!-- 设置内容类型及其字符集,contentType:text/html;charset=UTF-8 -->
        <init-param>
            <param-name>contentType</param-name>
            <param-value>text/html;charset=UTF-8</param-value>
        </init-param>
    </filter>

    <!-- filter的映射 -->
    <filter-mapping>
        <!-- 对应的filter名 -->
        <filter-name>AdminFilter</filter-name>
        <!-- 要进行拦截过滤的目录 -->
        <url-pattern>/web/admin/*</url-pattern>
    </filter-mapping>

    <session-config>
        <!-- 超时时间,单位:分钟 -->
        <session-timeout>30</session-timeout>
    </session-config>

  2. 使用SpringBoot

    Filter过滤类:

 1 import javax.servlet.*;
 2 import javax.servlet.annotation.WebFilter;
 3 import javax.servlet.annotation.WebInitParam;
 4 import java.io.IOException;
 5 
 6 @WebFilter(
 7         filterName = "CharsetFilter",
 8         urlPatterns = "/*",/*通配符(*)表示对所有的web资源进行拦截*/
 9         initParams = {
10                 @WebInitParam(name = "charset", value = "utf-8")/*这里可以放一些初始化的参数*/
11         }
12 )
13 public class FilterDemo implements Filter {
14 
15     @Override
16     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
17         System.out.println("开始拦截");
18         filterChain.doFilter(servletRequest,servletResponse);
19         System.out.println("拦截结束");
20     }
21 }

     代码说明:主要是新增了一个@WebFilter注解,下面是@WebFilter注解的详细说明。

     @WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 )

     @WebFilter的属性

      

 

 

     SpringBoot配置类的配置:

package cn.wolfcode;

import cn.wolfcode.filterdemo.FilterDemo;
import cn.wolfcode.interceptor.DemoInterceptor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication
public class AppStart implements WebMvcConfigurer {
    /**
     * 配置过滤器
     * @return
     */
    @Bean
    public FilterDemo filterDemo(){
        return new FilterDemo();
    }
    public static void main(String[] args) {
        SpringApplication.run(AppStart.class,args);
    }
}

    使用注入Bean的方法配置,还可以使用自动扫描配置。

 

posted @ 2020-06-13 17:23  围观的小妖  阅读(130)  评论(0编辑  收藏  举报