問題列表
問題一
問題描述
微服務中使用 OAuth2 鑒權,直接訪問正常,通過 Zuul 訪問報錯:
{
"error": "unauthorized",
"error_description": "Full authentication is required to access this resource"
}
解決方法
- 在 Zuul 中添加配置:
zuul:
sensitive-headers: Cookie,Set-Cookie
原因:
zuul.sensitive-headers (默認值 Cookie,Set-Cookie,Authorization) 是指 http header 中的敏感信息,默認情況下,ZUUL 是不轉發的
OAuth2 的鑒權信息是放在 Authorization 中,所以需要從配置中移除,切急不要把Authorization配置值加上去
問題二
問題描述
微服務中使用 OAuth2 鑒權,遇到資源無權限訪問,其實zuul對於服務來說也是OAuth2 的一個客戶端,因為也需要先通過OAuth2 的認證才會進行跳轉,錯誤如下:
Authentication request failed: exception:Invalid token does not contain resource id (oauth2-resource-client-auth)
解決辦法
在Zuul中的resourceServer中需要寫明是那個resourceId去連接
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.resourceId("resource-server").stateless(true);//在server的client里面配置
....
}
OAuth2 的配置如下,需要和resourceid一致才可以:

問題三
問題描述
Zuul整合時日志沖突,整合Zuul時,啟動時發現日志報錯

解決辦法
很明顯是日志Jar包沖突了,可以通過exclusions來解決,通過使用maven查看發現是zipkin-server也同時引入了log4j2的包

<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.7</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</exclusion>
</exclusions>
</dependency>
加入Pom.xml后重啟問題解決。
