@WebFilter(filterName = "LoginCheckFilter", urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter {
//判断页面的请求路径,支持通配符
private final static 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;
//1.获取本次请求的URL
String requestURI = request.getRequestURI();
//2.判断本次请求是否需要处理
String[] urls={"/employee/login","/employee/logout","backend/**","front/**"};
Boolean check = check(urls, requestURI);
//3 如果不需要就直接放行
if(check){
filterChain.doFilter(request,response);
log.info("放行");
return;
}
//4.判断用户是否已登录
if(request.getSession().getAttribute("employee")!=null){
filterChain.doFilter(request,response);
log.info("用户已存在,放行");
return;
}
//5.如果未登录就返回未登录的结果
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
return;
/* log.info("拦截到的uri:{}",request.getRequestURI());
filterChain.doFilter(request,response);*/
}
public Boolean check(String[] urls,String requseturl){
for (String url : urls) {
boolean match = PATH_MATCHER.match(url, requseturl);
if(match){return true;}
}
return false;
}
}
注意:在启动类上需要加上@ServletComponentScan注解,否者无法扫描加载过滤器