最近项目上使用springboot2.0.接触了一些以前未接触到的springboot特性,在此做一下笔记:
-
springboot使用filter
springboot以代码注册的方式实现filter,springboot利用FilterRegistrationBean来添加filter
首先,先定义自己的filter
@Component
public class TestFilter implements Filter {
private String usr;
private String apple;
private String orange;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
usr=filterConfig.getInitParameter("usr");
apple=filterConfig.getInitParameter("apple");
filterConfig.getInitParameterNames();
System.out.println("usr:"+usr);
System.out.println("orange:"+orange);
System.out.println("apple:"+apple);
System.out.println("testfilter init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("usr:"+usr);
System.out.println("orange:"+orange);
System.out.println("apple:"+apple);
System.out.println("testfilter do...");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("testfilter destory...");
}
}
然后在某个configuration中把该filter加入到FilterRegistrationBean中
@Bean
public FilterRegistrationBean createTestFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(testFilter);//加入到filter
filterRegistrationBean.addUrlPatterns("/*");//设置filter拦截的url
filterRegistrationBean.setName("test");//设置filter 的name
Map<String, String> map = new HashMap<>();
// map.put("apple", "apple");
// map.put("orange", "orange");
filterRegistrationBean.addInitParameter("usr", "test");
// filterRegistrationBean.setInitParameters(map);//不要和addInitParameter同时使用,否则usr会无法取到值
filterRegistrationBean.addServletRegistrationBeans();
filterRegistrationBean.setOrder(0);//设置filter调用顺序
return filterRegistrationBean;
}