響應異常:
{"error":"unauthorized","error_description":"Full authentication is required to access thisresource"}
當實現了用戶攜帶身份令牌訪問微服務之後,
微服務直接的訪問調用就會拋出未授權的異常,,解決方案 服務直接調用時攜帶令牌
Feign 攔截器
添加依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
創建攔截器
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
public class FeignClientInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
//攔截器
//使用RequestContextHolder工具獲取request相關變量
try {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null){
// 取出request
HttpServletRequest request = attributes.getRequest();
// 取出所有請求頭
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){
String name = headerNames.nextElement(); // key
String value = request.getHeader(name); //value
if(name.equals("authorization")){ //auoth2 認證請求頭
//System.out.println("name="+name+"values="+values);
requestTemplate.header(name, value);
}
}
}
}catch (Exception e){
}
}
}
使用feign
在 springboot 啓動類中配置feign攔截器
// 配置feign攔截器
@Bean
public FeignClientInterceptor feignClientInterceptor(){
return new FeignClientInterceptor();
}
然後就行了