@compent使Filter的urlPatterns失效

在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("應用關閉...");
    }
}

解決方式:

  1. 移除類上的@compent註解,在啓動類上添加@ServletComponentScan註解
  2. 不使用@WebFilter方式聲明過濾器,使用FilterRegistrationBean在配置類中注入Filter
    @Bean
    public FilterRegistrationBean loginFilter(){
    	FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    	registrationBean.setFilter(new LoginFilter());
    	registrationBean.setUrlPatterns(Arrays.asList("/auth/*"));
    	return registrationBean;
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章