1、新建上下文类工具类

public class ContextHolder {
    private static final InheritableThreadLocal<RequestContext> REQUEST_CONTEXT_INHERITABLE_THREAD_LOCAL = new InheritableThreadLocal();

    public ContextHolder() {
    }

    public static RequestContext get() {
        return (RequestContext)REQUEST_CONTEXT_INHERITABLE_THREAD_LOCAL.get();
    }

    public static void set(RequestContext context) {
        REQUEST_CONTEXT_INHERITABLE_THREAD_LOCAL.set(context);
    }

    public static void remove() {
        REQUEST_CONTEXT_INHERITABLE_THREAD_LOCAL.remove();
    }
}

 2、新建上下文类

@Data
public class RequestContext {
    private String userPin;
    private String deviceId;
    private String appVersion;
    private String ip;
    private String requestId;
    private Cookie[] cookies;
    private Boolean forceBot;
    private Boolean iosFlag;
    private String venderId;
    private String currencyCode;
}

 3、新增拦截器

@Slf4j
public class RequestProcessInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        this.process(request, response);
        return true;
    }

    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
    }

    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        ContextHolder.remove();
        ThreadContext.clearAll();
    }

    private void setCookies(HttpServletRequest request, RequestContext requestContext) {
        Cookie[] cookies = request.getCookies();
        requestContext.setCookies(cookies);
    }
    private void process(HttpServletRequest request, HttpServletResponse response) {
        String platform = request.getHeader("x-api-platform");
        String deviceId = request.getHeader("x-api-device-token");
        String appVersion = request.getHeader("x-api-app-version");
        RequestContext context = ContextHolder.get() == null ? new RequestContext() : ContextHolder.get();
        this.setCookies(request, context);
        String pin = request.getHeader("pin");
        context.setUserPin(pin);
  String token = request.getHeader("token");//解析获取userName  userId
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (StringUtils.isBlank(token) && cookie.getName().equals("token")) {
token=cookie.getValue();
}
}
context.setUserName(token);
ContextHolder.set(context); } }

 4、新增拦截器配置

@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RequestProcessInterceptor()).addPathPatterns("/**").excludePathPatterns("/login").order(0);
        registry.addInterceptor(new ResponseProcessInterceptor()).addPathPatterns("/**").excludePathPatterns("/login").order(1);
    }
}