场景,如果自定义Filter只需要针对指定路径的请求进行过滤,
则需要urlPatterns来匹配url
自定义认证Filter
/**
* 权限认证问题处理
*/
@Order(1)
@WebFilter(filterName = "authFilter", urlPatterns = "/api/**")
public class AuthFilter implements Filter {
private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//自定义检验规则
chain.doFilter(req, res);
}
@Override
public void destroy() {
}
}
以上自定义Filter 如果字节配合 @Component 使用 或者使用
@Configuration
public class FilterBeanConfig {
@Bean
public AuthFilter authFilter() {
return new AuthFilter();
}
}
都无法使 urlPatterns 生效。
解决办法:
方法1,在启动类上加入注解扫描filter所在文件夹
@ServletComponentScan(basePackages = {“com.xxx.xxx.framework.filter”})
方法2: 在FilterBeanConfig 中增加urlPatters
@Configuration
public class FilterBeanConfig {
@Autowired
AuthFilter authFilter;
@Bean
public AuthFilter authFilter() {
return new AuthFilter();
}
@Bean
public FilterRegistrationBean registrationProjectFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(authFilter);
registration.addUrlPatterns("/api/*");
return registration;
}
}