zoukankan      html  css  js  c++  java
  • SpringCloud接入Passport中台服务的FeignClient简易集成配置

    1,Passport作为用户统一账户(登录注册等)中心,因此客户端应当封装成统一的针对不同平台的SDK;

    2,所有系统服务访问Passport,都必须携带由Passport颁发的APP统一标识appId;

    3,所有系统服务访问Passport,都必须携带用户登录成功后取得的token。

    • 后台服务客户端访问Passport配置
    @Configuration
    public class CommonConfig implements RequestInterceptor, HandlerInterceptor {
    
        public static final ThreadLocal<String> Token = new ThreadLocal();
    
        @Value("${app.id}")
        private String AppID;
    
    
        @Bean
        public WebMvcConfigurer webMvcConfigurer(@Autowired CommonConfig config) {
            return new WebMvcConfigurer(){
                @Override
                public void addInterceptors(InterceptorRegistry registry) {
    				//	配置需要访问UCenter的请求url
                    String[] includePatterns =  {"/**","/passport/**"};
                    HandlerInterceptor mappedInterceptor = new MappedInterceptor(includePatterns, null, config);
                    registry.addInterceptor(mappedInterceptor);
                }
            };
        }
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                                 Object handler) {
    		//将app客户端请求header中的token使用ThreadLocal缓存起来,
    		//后续将请求转发至Passport时,获取token构造请求header
            String token = request.getHeader("token");
            Token.set(token);
            return true;
        }
    
        @Override
        public void apply(RequestTemplate requestTemplate) {
    		//所有通过 FeignClient 发出的request header都会被该构造,
    		//为了满足2和3的要求,所有发出的请求头中加入appId和token
            String token = Token.get();
            requestTemplate.header("appId", AppID);
            requestTemplate.header("token", token);
        }
    }

    如上述代码所示,定义spring boot配置类CommonConfig,并实现RequestInterceptor和HandlerInterceptor接口,分别实现

     boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)和void apply(RequestTemplate requestTemplate)方。同时还要注册WebMvcConfigurer类,配置请求拦截url,并在拦截方法preHandle中缓存请求header的token。 

    随后,将请求转发到Passport时,在请求header里加入缓存的token和对应服务的AppID。

  • 相关阅读:
    mongodb数组操作
    tmux使用心得
    redis设置key总结
    gitbook构建文档命令
    js中for in,of区别
    redis清除缓存和连接远程服务器
    Postman使用记录
    asp.net中导出Execl的方法
    CASE WHEN 用法
    js 字符串转换数字
  • 原文地址:https://www.cnblogs.com/shenjixiaodao/p/12659920.html
Copyright © 2011-2022 走看看