springBoot中使用filter主要说两个东西
第一:@WebFilter(这个注解主要是用在实现Filter的类上,它的作用就是支持某个请求地址或者某些请求地址进入此过滤器也就是此类,两个参数,urlPatterns(过滤地址可以是全路径(/user/list),可以是模糊路径(/user/*))filterName(过滤器名称)
第二:@ServletComponentScan(这个放在启动类上主要作用是扫描@WebFilter,让@WebFilter起作用)
Filter代码部分
package com.example.demo.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@Component
@WebFilter(urlPatterns = "/user/*", filterName = "filterTest")
public class FilterTest implements Filter {
Logger logger = LoggerFactory.getLogger(FilterTest.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String url = httpServletRequest.getRequestURI();
String authorization = httpServletRequest.getHeader("Authorization");
logger.info("请求地址:" + url);
logger.info("Authorization:" + authorization);
boolean flag = true;
if ("".equals(authorization)) {
logger.error("未登录");
} else {
filterChain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
下面是启动类代码
package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan
@SpringBootApplication
public class DemoApplication {
static Logger logger = LoggerFactory.getLogger(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
logger.info("项目启动好了开始搞事情吧。。");
}
}
我上面是拦截的是请求地址为user/开头的地址,所以当我访问其它地址时filter不会拦截,验证登录状态就可以用此方法解决