SpringBoot +过滤器Filter 获取Bean

在过滤器初始化获取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();
    }
}

猜你喜欢

转载自blog.csdn.net/yuzheh521/article/details/121211444