使用springmvc过滤器进行过滤拦截
package com.reggie.filter;
import com.alibaba.fastjson.JSON;
import com.reggie.vo.R;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.WebFault;
import java.io.IOException;
/**
* Description:
* 检查用户是否完成登录
*
* @author JourWon
* @date 2022/7/5 17:46
* <p>
* 使用mvc拦截器 拦截判断用户是否用户登录 ,如果没有登录则调到登录页面
*/
@Slf4j
@WebFilter(filterName = "LoginCheckFilter", urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
/**
* AntPathMatcher 主要用来做路径的匹配,在权限模块会用到接口路径的匹配,
* 路径匹配器,支持通配符*
*/
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;
// 1.获取url
String uri = request.getRequestURI();
log.info("访问的请求:{}", uri);
//2. 设置需要放行的url
String[] urls = {
"/employee/login",
"/employee/logout",
"/backend/**",
"/front/**"
};
//3. 判断本次请求 是否需要处理
boolean check = check(urls, uri);
if (check) {
log.info("是否放行:{}", check);
//放行
filterChain.doFilter(request, response);
return;
}
//4 判断用户是否完成登录 ,如果不等于空 直接放行
//登录时放入的
if (request.getSession().getAttribute("用户ID") != null) {
log.info("用户以登录");
filterChain.doFilter(request, response);
}
log.info("用户未登录");
// 5.如果没有登录则返回未登录结果, 通过输出流方式向客户端界面相应数据
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
log.info("拦截请求: {}", request.getRequestURI());
}
/**
* @Description: 判断是否有拦截的url
* @Param: [urls, url]
* @return: boolean
* @Author: 拂面
* @Date: 2022/7/5
*/
public boolean check(String[] urls, String url) {
for (String u : urls) {
// 路径进行比较
boolean match = PATH_MATCHER.match(u, url);
if (match) {
return true;
}
}
return false;
}
}