要新建Filter的继承类和WebConfiguration将自定义 Filter 加入过滤链
会导致requestBody为null,暂时不适用
方式一
1 自定义过滤器
MyFilter
import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import java.io.IOException;/*** @Description* @Author 田云* @Date 2019/3/7 10:04* @Version 1.0*/public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;System.out.println("拦截的请求:"+request.getRequestURI());filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}}
2、加入过滤器链
filter/WebConfiguration.java
import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/*** @Description* @Author 田云* @Date 2019/3/7 10:23* @Version 1.0*/@Configurationpublic class WebConfiguration {@Beanpublic FilterRegistrationBean testFilterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new MyFilter());registration.addUrlPatterns("/*");registration.setName("MyFilter");registration.setOrder(6);return registration;}// 另一个自定义的过滤,Order表示顺序,小的先执行@Beanpublic FilterRegistrationBean test2FilterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new MyFilter2());registration.addUrlPatterns("/*");registration.setName("MyFilter2");registration.setOrder(1);return registration;}}
方式二(推荐)
1、添加webfilter注解
import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import java.io.IOException;/*** created with IntelliJ IDEA.* author: fxbin* date: 2018/9/9* time: 14:22* description:*/@WebFilter(filterName = "myFilter", urlPatterns = "/*")public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("init...");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;String requestURI = request.getRequestURI();if(requestURI.contains("my")){System.out.println("成功啦。。。, 请求URI是:" + requestURI);}filterChain.doFilter(request, servletResponse);}@Overridepublic void destroy() {System.out.println("destroy...");}}
2、启动类添加@ServletComponentScan注解
跨域处理
import lombok.extern.slf4j.Slf4j;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebFilterpublic class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "x-requested-with");chain.doFilter(req, res);}public void init(FilterConfig filterConfig) {// something init}public void destroy() {// destroy something}}
