过滤器:
@Component
@WebFilter(filterName = "MyFilter",
/**
* 通配符(*)表示对所有的web资源进行拦截
*/
urlPatterns = "/*"
)
@Slf4j
public class MyFilter implements Filter {
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void init(FilterConfig filterConfig){
log.info("初始化过滤器!");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//转型
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper( servletResponse);
/**
// 请求url中包含/login 或 /online,继续执行
if (request.getRequestURI().contains("/login")
|| request.getRequestURI().contains("/online") ){
// 交给下一个过滤器或servlet处理
chain.doFilter(servletRequest,servletResponse);
}else {
// 请求url不包含/login 或 /online,重定向到/online接口
wrapper.sendRedirect("/entry/online");
}
*/
//获取请求URI
log.info(servletRequest.getRequestURI());
// 设置不要拦截的请求 数组
String[] urls = new String[]{
"/employee/login",
//"/employee/layout",
//"/backend/**",
//"/front/**",
//"/swagger-ui.html",
//"/user/code",
"/user/login"
};
if (match(servletRequest.getRequestURI(),urls)){
chain.doFilter(servletRequest,servletResponse);
return;
}
// 需要验证的请求
User user = (User)servletRequest.getSession().getAttribute("user");
Employee employee = (Employee)servletRequest.getSession().getAttribute("employee");
// 需要验证的请求
if (user != null){
UserContext.setUserId(user.getId());
chain.doFilter(servletRequest,servletResponse);
}else if (employee !=null){
UserContext.setUserId(employee.getId());
chain.doFilter(servletRequest,servletResponse);
}else {
response.getWriter().write(JSONUtil.toJsonStr(R.error("NOTLOGIN")));
}
}
// 匹配url
public boolean match(String url,String[] urls){
for (String item : urls) {
if (PATH_MATCHER.match(item, url)){
return true;
}
}
return false;
}
}