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();
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzhSWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值