SpringCloud OpenFeign token中转

OpenFeign 的本质是调用指定服务的 Controller。

前后端分离项目,调用 Controller 是需要传递 token 的。

OpenFeign 并不会自动携带 token 去访问 Controller,所以需要手动进行中转。

手动进行 token 中转比较简单,只需要一个配置类即可实现。

import cn.hutool.core.util.ObjUtil;
import feign.RequestInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;

@Slf4j
@Configuration
public class OpenFeignConfig {
    
    @Bean
    public RequestInterceptor requestInterceptor() {
        
        return requestTemplate -> {

            String token;
            // 请求方
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            if (ObjUtil.isEmpty(requestAttributes)) {
                return;
            } else {
                // 获取请求方token
                HttpServletRequest request = requestAttributes.getRequest();
                token = request.getHeader("Authorization");
            }
            // 被请求方设置token,实现token中转
            requestTemplate.header("Authorization", token);
        };
    }
    
}
posted @ 2023-09-13 13:40  天航星  阅读(89)  评论(0编辑  收藏  举报