日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oauth2 token为空拦截_feign之间传递oauth2-token的问题和解决

發(fā)布時間:2024/1/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oauth2 token为空拦截_feign之间传递oauth2-token的问题和解决 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在微服務架構里,服務與服務之間的調(diào)用一般用feign就可以實現(xiàn),它是一種可視化的rpc,并且集成了ribbon的負載均衡能力,所以很受歡迎。

授權服務

在授權服務里,用戶通過用戶名密碼,或者手機和驗證碼等方式登陸之后,在http頭里會有授權的標識,在客戶端調(diào)用時,需要添加當時有效的token才可以正常訪問被授權的頁面。

Content-Type:application/json

Authorization:Bearer d79c064c-8675-4047-a119-fac692e447e8

而在業(yè)務層里,服務與服務之間使用feign來實現(xiàn)調(diào)用,而授權的代碼我們可以通過攔截器實現(xiàn),在feign請求之前,把當前服務的token添加到目標服務的請求頭就可以了,一般是這樣實現(xiàn)的。

/**

* 發(fā)送FeignClient設置Header信息.

* http://www.itmuch.com/spring-cloud-sum/hystrix-threadlocal/

* Hystrix傳播ThreadLocal對象

*/

@Component

public class TokenFeignClientInterceptor implements RequestInterceptor {

/**

* token放在請求頭.

*

* @param requestTemplate 請求參數(shù)

*/

@Override

public void apply(RequestTemplate requestTemplate) {

RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();

if (requestAttributes != null) {

HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();

String token = request.getHeader(TokenContext.KEY_OAUTH2_TOKEN);

requestTemplate.header(TokenContext.KEY_OAUTH2_TOKEN,

new String[] {token});

}

}

}

上面的攔截器代碼沒有什么問題,也很好理解,但事實上,當你的feign開啟了hystrix功能,如果開啟了,需要把hystrix的策略進行修改,默認是THREAD的,這個級別時ThreadLocal是空的,所以你的授權不能傳給feign的攔截器.

hystrix.command.default.execution.isolation.strategy: SEMAPHORE

資源項目里獲取當前用戶

在另一個項目,需要其它獲取當前用戶,需要使用下面的代碼。

先配置一個授權的地址

security:

oauth2:

resource:

id: user

user-info-uri: http://${auth.host:localhost}:${auth.port:8002}/user # 這里是授權服務的地址,即auth-service

prefer-token-info: false

auth:

host: localhost #這個不可以用eureka里的服務名,只能使用docker-compose里的服務名

port: 8002

下面的代碼用來獲取當前用戶

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

String user = objectMapper.writeValueAsString(authentication.getPrincipal());

本講主要對feign的請求頭傳遞信息進行講解,開發(fā)時遇到的坑總節(jié)了一下,分享給大家!

總結

以上是生活随笔為你收集整理的oauth2 token为空拦截_feign之间传递oauth2-token的问题和解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。