springboot拦截器Filter获取配置文件参数 | 您所在的位置:网站首页 › filter-policy怎么读 › springboot拦截器Filter获取配置文件参数 |
方法一、过滤器使用@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 实验室设备网 版权所有 |