1. 程式人生 > 程式設計 >解決Springboot @WebFilter攔截器未生效問題

解決Springboot @WebFilter攔截器未生效問題

問題描述

@WebFilter(filterName = “ssoFilter”,urlPatterns = “/*”)

未生效攔截器

解決方法

在springboot啟動類上新增

@ServletComponentScan(basePackages = “full.package.path”)

路徑替換為@WebFilter所在包

補充知識:在spring boot中使用@WebFilter配置filter(包括排除URL)

我就廢話不多說了,大家還是直接看程式碼吧~

@WebFilter(urlPatterns = "/*")
@Order(value = 1)
public class TestFilter implements Filter {
 
  private static final Set<String> ALLOWED_PATHS = Collections.unmodifiableSet(new HashSet<>(
      Arrays.asList("/main/excludefilter","/login","/logout","/register")));
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    System.out.println("init-----------filter");
  }
 
  @Override
  public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    String path = request.getRequestURI().substring(request.getContextPath().length()).replaceAll("[/]+$","");
    boolean allowedPath = ALLOWED_PATHS.contains(path);
 
    if (allowedPath) {
      System.out.println("這裡是不需要處理的url進入的方法");
      chain.doFilter(req,res);
    }
    else {
      System.out.println("這裡是需要處理的url進入的方法");
    }
  }
 
  @Override
  public void destroy() {
    System.out.println("destroy----------filter");
  }
}

@Order中的value越小,優先順序越高。

以上這篇解決Springboot @WebFilter攔截器未生效問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。