package com.dy.common.webFilter; 
 | 
  
 | 
import com.alibaba.fastjson2.JSON; 
 | 
import com.dy.common.contant.Constant; 
 | 
import com.dy.common.webUtil.BaseResponse; 
 | 
import com.dy.common.webUtil.BaseResponseUtils; 
 | 
import com.mysql.cj.util.StringUtils ; 
 | 
import jakarta.servlet.*; 
 | 
import jakarta.servlet.http.HttpServletRequest; 
 | 
import jakarta.servlet.http.HttpServletResponse; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import java.io.IOException; 
 | 
import java.io.PrintWriter; 
 | 
  
 | 
@Slf4j 
 | 
public class UserTokenFilter implements Filter { 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public void init(FilterConfig filterConfig) throws ServletException { 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
 | 
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest; 
 | 
        String requestURI = httpRequest.getRequestURI(); 
 | 
        // 检查请求是否为非过滤项 
 | 
        if (UserTokenNoFilter.urls != null && UserTokenNoFilter.urls.stream().anyMatch(url -> requestURI.startsWith(url))) { 
 | 
            // 如果是非过滤项,直接调用下一个过滤器或servlet 
 | 
            filterChain.doFilter(servletRequest, servletResponse); 
 | 
        } else { 
 | 
            // 如果不是非过滤项,执行过滤逻辑 
 | 
            HttpServletRequest request = (HttpServletRequest) servletRequest; 
 | 
            HttpServletResponse response = (HttpServletResponse) servletResponse; 
 | 
            String token = request.getHeader(Constant.TokenKeyInHeader); 
 | 
            if(!StringUtils.isNullOrEmpty(token)){ 
 | 
                UserTokenContext.set(token); 
 | 
                filterChain.doFilter(servletRequest, servletResponse); 
 | 
            }else{ 
 | 
                PrintWriter pw = null ; 
 | 
                try { 
 | 
                    BaseResponse<?> res = BaseResponseUtils.buildToLogin() ; 
 | 
                    String jsonString = JSON.toJSONString(res); 
 | 
                    response.setCharacterEncoding("UTF-8"); 
 | 
                    response.setContentType("application/json; charset=utf-8"); 
 | 
                    pw = response.getWriter() ; 
 | 
                    pw.write(jsonString); 
 | 
                    pw.flush(); 
 | 
                } catch (IOException e) { 
 | 
                    e.printStackTrace(); 
 | 
                }finally { 
 | 
                    if(pw != null){ 
 | 
                        pw.close(); 
 | 
                    } 
 | 
                } 
 | 
                //request.setAttribute(Constant.ErrorKeyInRequest, "未得到用户token"); 
 | 
                //response.sendRedirect("/error"); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void destroy() { 
 | 
    } 
 | 
} 
 |