在过滤器初始化获取bean 的第一种方式
public class IpFilter implements Filter {
private BootdoConfig bootdoConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
ServletContext context = filterConfig.getServletContext();
ApplicationContext ctx =
WebApplicationContextUtils.getWebApplicationContext(context);
bootdoConfig = ctx.getBean(BootdoConfig.class);
}
}
一.实现过滤器接口
public class MyFilter implements Filter {
//初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//注册过滤器时传入的参数
System.out.println(filterConfig.getInitParameter("a"));
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("拦截所有请求1");
MyHttpsServletWrapper newRequest = new MyHttpsServletWrapper((HttpServletRequest) servletRequest);
//调用doFilter()方法继续执行,如果不调用程序不会往下执行
filterChain.doFilter(newRequest,servletResponse);
System.out.println("拦截所有响应2");
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
二.注册过滤器
@Configuration
public class MyConfigFilter {
@Bean
public FilterRegistrationBean myFilter() {
//注册过滤器
FilterRegistrationBean<Filter> filterRegistration = new FilterRegistrationBean<>();
//注册过滤器
filterRegistration.setFilter(new MyFilter());
//拦截规则
filterRegistration.addUrlPatterns("/*");
HashMap<String, String> map = new HashMap<>();
map.put("a", "a1");
//初始化传参数
filterRegistration.setInitParameters(map);
return filterRegistration;
}
}
三.修改请求参数HttpServletRequestWrapper
package com.example.demo.filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Map;
/**
* @author charsming
* @title: MyHttpsServletWrapper
* @projectName demo1
* @description: TODO
* @date 2021/11/119:13
*/
public class MyHttpsServletWrapper extends HttpServletRequestWrapper {
//HttpServletRequestWrapper 只有 有参构造器
public MyHttpsServletWrapper(HttpServletRequest request) {
//所以必须调用父类有参构造器
super(request);
}
/**
* @param name
* @Method getParameterValues
* @Author charsming
* @Version 1.0
* @Description 获取 请求的 所有参数 String hello(String id,String d)
* @Return java.lang.String[]
* @Date 2021/11/11 10:12
*/
@Override
public String[] getParameterValues(String name) {
String[] parameterValues = super.getRequest().getParameterValues(name);
for (int i = 0; i < parameterValues.length; i++) {
parameterValues[i] = parameterValues[i] + "yzh";
}
return parameterValues;
}
/**
* @param
* @Method getParameterMap
* @Author charsming
* @Version 1.0
* @Description 获取 请求的参数是 map 所有参数 String hello(@RequestParam Map<String, Object> map)
* @Return java.util.Map<java.lang.String, java.lang.String [ ]>
* @Date 2021/11/11 10:12
*/
@Override
public Map<String, String[]> getParameterMap() {
Map<String, String[]> parameterMap = super.getParameterMap();
return super.getParameterMap();
}
}