package com.gosbyte.provider.filter; import cn.hutool.core.text.AntPathMatcher; import com.alibaba.fastjson.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Objects; @Component @WebFilter(urlPatterns = "/provider/clocking/group/*") public class LoginCheckFilter implements Filter { //路径匹配器,支持通配符,可以匹配通配符。 public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher(); private static final Logger logger = LoggerFactory.getLogger(LoginCheckFilter.class); @Autowired private UserUtilService userUtilService; @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //1.获取本次请求的uri String requestURI = request.getRequestURI(); //定义不需要处理的请求路径 String[] urls = new String[]{ "/provider/clocking/group/page", "/provider/v2/api-docs" }; //2.判断本次请求是否需要处理 boolean check = check(urls, requestURI); //3.如果不需要处理,则直接放行 if (check) { filterChain.doFilter(request, response); return; } //4.判断登录状态 AuthUserInfoDTO user = userUtilService.getUserId(request); logger.info("当前用户信息:{}", user); if (Objects.isNull(user)) { response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(JSON.toJSONString(CommonResult.failCommonResult(DingClockExceptionEnum.user_token_expire))); return; } filterChain.doFilter(request, response); } /** * 路径匹配,检查本次请求是否需要放行 * * @param urls * @param requestURI * @return 需要放行:true, 否则:false */ public boolean check(String[] urls, String requestURI) { for (String url : urls) { boolean match = PATH_MATCHER.match(url, requestURI); if (match) { return true; } } return false; } }
11-30
3790
03-09
5737
09-09