一共有两种方法实现自定义过滤器
- 使用注解@WebFilter
- 定义配置文件
- 使用注解@WebFilter,可以通过注解进行配置一些属性,此处代码未给出…
import javax.servlet.*;
import javax.servlet.FilterConfig;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("-----------调用过滤器doFilter------------");
filterChain.doFilter(servletRequest, servletResponse); // 通过过滤器
}
@Override
public void destroy() {
System.out.println("-----------调用过滤器destroy------------");
Filter.super.destroy();
}
}
同时Application主文件需要添加扫描注解
@ServletComponentScan(value = "com")
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
- 定义配置文件
使用@Component注入过滤器
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.FilterConfig;
import java.io.IOException;
@Component
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("-----------调用过滤器doFilter------------");
filterChain.doFilter(servletRequest, servletResponse); // 通过过滤器
}
@Override
public void destroy() {
System.out.println("-----------调用过滤器destroy------------");
Filter.super.destroy();
}
}
然后定义配置文件
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Configuration
public class FilterConfig {
@Autowired
private MyFilter myFilter;
@Bean
public FilterRegistrationBean registrationBean(){
FilterRegistrationBean registration = new FilterRegistrationBean();
// 将过滤器配置到FilterRegistrationBean对象中
registration.setFilter(myFilter);
// 给过滤器取名
registration.setName("requestFilter");
// 设置过滤器优先级,该值越小越优先被执行
registration.setOrder(1);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("noFilterUrl", "/userInfo/*");
// 设置initParams参数
registration.setInitParameters(paramMap);
List<String> urlPatterns = new ArrayList<>();
urlPatterns.add("/*");
// 设置urlPatterns参数
registration.setUrlPatterns(urlPatterns);
return registration;
}
}
主文件不需要修改