参考文章:https://www.cnblogs.com/yoyotl/p/10853499.html
1.写配置类HelloFilter
在HelloFilter配置过滤器
package com.test.component.config;
import com.chinalife.security.filter.SecFilter;
import javax.annotation.Resource;
import javax.servlet.*;
import javax.servlet.FilterConfig;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import java.io.File;
import java.io.IOException;
@WebFilter(urlPatterns="/*",filterName="helloFilter",initParams= {@WebInitParam(name="paramName",value="paramValue"),@WebInitParam(name="paramName2",value="paramValue2")})
public class HelloFilter implements Filter {
SecFilter secFilter = new SecFilter();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化过滤!");
File file = new File("/Users/liang/Desktop/filterBlackList.xml");
secFilter.setFilter_file(file);
secFilter.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行HelloFilter");
// filterChain.doFilter(servletRequest, servletResponse);
secFilter.doFilter(servletRequest, servletResponse, filterChain);
}
@Override
public void destroy() {
}
}
这里注意要加@WebFilter来让Spring扫描到Filter。
该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 )。
第二种可以通过手动进行配置:
先写好Filter配置类,以组件的方式被Spring扫描到
然后在用@Configuration让Spring扫描到
@Slf4j
@Component
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
log.debug("start to auth request validate...111");
HttpServletRequest req = (HttpServletRequest) request;
String token = req.getHeader("token");
if (token != null) {
// :TODO check token
log.info("auth success");
chain.doFilter(request, response);
} else {
log.err("auth failed");
}
}
}
@Configuration
public class FilterConfig {
@Autowired
private AuthFilter authFilter;
@Bean
public FilterRegistrationBean registerAuthFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(authFilter);
registration.addUrlPatterns("/*");
registration.setName("authFilter");
registration.setOrder(1); //值越小,Filter越靠前。
return registration;
}
//如果有多个Filter,再写一个public FilterRegistrationBean registerOtherFilter(){...}即可。
}