> 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);
};
}
}