使用注解
package com.guoxiaocha;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
/**
* 启动类
*
* @author mtx
* @date 2022/01/26 11:59
*/
@SpringBootApplication
@ServletComponentScan // 使用@WebFilter注解时 必须有@ServletComponentScan注解将带有@WebFilter的类包含进去。
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
package com.guoxiaocha.filters;
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @author mtx
* @date 2022/01/27 8:51
*/
@WebFilter(urlPatterns = {"/test/hi","/test/man"},filterName = "myFilter2")
@Order(2)
public class MyFilter2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
String requestURI = request.getRequestURI();
String method = request.getMethod();
System.out.println("222----"+requestURI + "---"+ method);
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
使用配置
自定义一个FilterConfig配置类
package com.guoxiaocha.config;
import com.guoxiaocha.filters.MyFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* @author mtx
* @date 2022/01/27 9:19
*/
@Configuration
public class FilterConfig {
@Value(value = "${filter.myFilter.urlPatterns}")
private String myFilterUrlPatterns; // /test/hello,/test/hi
/**
* 将路径传到filter中,再根据路径匹配判断
*/
@Bean
public FilterRegistrationBean<MyFilter> filterRegistrationBean(){
FilterRegistrationBean<MyFilter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new MyFilter());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.setName("myFilter");
// 设置拦截路径匹配字符串
// filterRegistrationBean.addUrlPatterns("/test/hello","/test/hi");
filterRegistrationBean.setUrlPatterns(Arrays.asList(myFilterUrlPatterns.split(",")));
// 向自定义filter中传参
Map<String,String> map = new HashMap<>();
map.put("param","value");
filterRegistrationBean.setInitParameters(map);
filterRegistrationBean.addInitParameter("param2","value2");
return filterRegistrationBean;
}
}
package com.guoxiaocha.filters;
import org.junit.platform.commons.util.StringUtils;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Arrays;
/**
* @author mtx
* @date 2022/01/27 8:51
*/
public class MyFilter implements Filter {
private String[] param = new String[6];
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String filterList = filterConfig.getInitParameter("param"); // 可以配置白名单,黑名单等
String filterList2 = filterConfig.getInitParameter("param2"); // 可以配置白名单,黑名单等
if (StringUtils.isNotBlank(filterList)) {
param[0] = filterList;
}
if (StringUtils.isNotBlank(filterList2)) {
param[1] = filterList2;
}
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String requestURI = request.getRequestURI();
String method = request.getMethod();
System.out.println(requestURI + "---" + method + "---" + Arrays.toString(param));
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}