在springboot應用中自定義Filter時,在Filter上添加@compent
註解會使urlPatterns
匹配路徑變爲/*
而不是自定義路徑
@Slf4j
//@Component urlPatterns失效
@WebFilter(filterName = "loginFilter", urlPatterns = "/auth/*")
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("初始化參數...");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
log.info("過濾請求...[{}]", request.getRequestURL().toString());
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
log.info("應用關閉...");
}
}
解決方式:
- 移除類上的
@compent
註解,在啓動類上添加@ServletComponentScan
註解 - 不使用
@WebFilter
方式聲明過濾器,使用FilterRegistrationBean
在配置類中注入Filter@Bean public FilterRegistrationBean loginFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new LoginFilter()); registrationBean.setUrlPatterns(Arrays.asList("/auth/*")); return registrationBean; }