springboot拦截器Filter获取配置文件参数 您所在的位置:网站首页 filter-policy怎么读 springboot拦截器Filter获取配置文件参数

springboot拦截器Filter获取配置文件参数

2024-07-12 13:34| 来源: 网络整理| 查看: 265

方法一、过滤器使用@Component注解时,@value注解可用

说明:如果使用@Component,同时将Filter通过@Configuration加入过滤链时,@value将拿不到值。

@Component public class CorsFilter implements Filter { @Value("${xx.security.csrf-ingores}") private String csrfIngores; /************解决Origin跨域 安全漏洞*************/ @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest reqs = (HttpServletRequest) req; System.out.println("csrfIngores:----------------------------"+csrfIngores); } @Override public void init(FilterConfig filterConfig) {} @Override public void destroy() {} }

方法二、配置过滤器时,将参数传入

使用@Configuration将自定义filter加入过滤链时,使用setInitParameters(Map initParameters)方法将参数初始化到过滤器。

此方案中,如果在自定义filer中无法通过@value注解获取,因为自定义的Filter 并不是一个bean,也就是说并没有纳入到spring容器中进行管理,所以 @Value 是没办法让Spring帮我们注入进来的。

/** * 过滤器配置 */ @Configuration public class FilterConfiguration { @Value("${xx.security.csrf-ingores}") private String csrfIngores; private Map initParametersMap = new HashMap(); /***********解决referer 安全漏洞**************/ @Bean public FilterRegistrationBean csrfFilterRegistration() { initParametersMap.put("csrfIngores",csrfIngores); FilterRegistrationBean registration = new FilterRegistrationBean(); RefererCsrfFilters refererCsrfFilers = new RefererCsrfFilters(); registration.setFilter(refererCsrfFilers); registration.setInitParameters(initParametersMap); registration.addUrlPatterns("/*"); registration.setOrder(Integer.MIN_VALUE); return registration; } } /** * 防止CSRF跨站请求攻击。 */ public class RefererCsrfFilters extends IngoreChecker implements Filter { private static String csrfIngores; @Override public void destroy() {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; System.out.println("csrfIngores:----------------------------"+csrfIngores); } @Override public void init(FilterConfig config) throws ServletException { csrfIngores = config.getInitParameter("csrfIngores"); } } 方法三、直接在静态工具类中注入值。

……

方法四、Filter中加载配置文件再去读取。

可行但影响性能,毕竟这是个全局过滤器,每次请求进来都加载一下配置文件,不够优雅。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有