@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越小,優先級越高。
ALLOWED_PATHS
這個是一個集合,存放的是需要排出的URL,用來判斷是否是需要排除的URL。
關于為什麼SpringBoot中使用了@WebFilter但是過濾器卻沒有生效:一定要加上@Configuration注解,@Service其實也可以,其他類似。