目 录CONTENT

文章目录

SpringBoot 自定义拦截器,拦截token。存储在线程

不争
2024-01-02 / 0 评论 / 0 点赞 / 7 阅读 / 6018 字

SpringBoot 自定义拦截器,拦截token。存储在线程

0.服务流程

1681111173257

image-20230925175729644

1.TokenInterceptor类

package com.javasm.Interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Author: GuoZheng
 * @Version: 1.0
 * @Date: 2023/9/25-17:42
 * @Since: jdk1.8
 * @Description:
 */
@Component
public class TokenInterceptor implements HandlerInterceptor {
    private static final ThreadLocal<String> tokenHolder = new ThreadLocal<>();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("X-token");
        System.out.println("token:" + token);
        tokenHolder.set(token);
        return true;
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 请求处理完毕后,清除ThreadLocal中的token
        tokenHolder.remove();
    }
    public static String getToken() {
//        System.out.println(tokenHolder.get());
        return tokenHolder.get();
    }
}

2.拦截器配置

package com.javasm.config;

import com.javasm.Interceptor.TokenInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Author: GuoZheng
 * @Version: 1.0
 * @Date: 2023/9/25-17:50
 * @Since: jdk1.8
 * @Description:
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TokenInterceptor()).addPathPatterns("/**");
    }
}

3.Controller

    @RequestMapping("pay4")
    public String pay4() {
        String token = TokenInterceptor.getToken();
        return "支付" + port + "+" + token;
    }

4.openfegin

@RestController
@FeignClient("gateway-test02")
public interface PayServiceController {
    @RequestMapping("/api/pay2/pay4")
    String getServerPay(@RequestHeader("X-token") String token);
}

5.最终效果

image-20230925175600824

0

评论区