- 比如实现登录验证功能
在 Application 添加过滤器注解
@ServletComponentScan // 扫描过滤器
public class ActualprojectApplication {
public static void main(String[] args) {
SpringApplication.run(ActualprojectApplication.class, args);
}
}
- 实现过滤器类
/*
* 用户登录过滤器,检查用户是否登录
*/
@WebFilter(filterName = "LoginCheckFilter",urlPatterns = "/*") //检查所有接口是否登录
@Slf4j
public class LoginCheckFilter implements Filter {
// 路径匹配器
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
log.info("拦截的请求: " + request.getRequestURI());
// 获取本次请求的URI
String requestURI = request.getRequestURI();
// 设置不需要处理的请求路径
String[] urls = new String[] {
"/employee/login",
"/employee/loginout"
};
// 判断拦截的请求是否需要处理
Boolean isHandle = this.checkURI(urls, requestURI);
// 不需要处理直接放行
if (isHandle) {
filterChain.doFilter(servletRequest,servletResponse);
return;
}
// 判断登录状态,如果登录直接放行
if (request.getHeader("token") != null) {
filterChain.doFilter(servletRequest,servletResponse);
return;
}
// 如果未登录
response.getWriter().write(JSON.toJSONString(Result.error("no login!")));
}
public Boolean checkURI(String[] urls,String requestUrl) {
for (String url : urls) {
boolean match = PATH_MATCHER.match(url, requestUrl);
if (match) {
return true;
}
}
return false;
}
}