問(wèn)題描述
有做權(quán)限處理的服務(wù)接口直接調(diào)用會(huì)造成調(diào)用時(shí)出現(xiàn)http 401未授權(quán)的錯(cuò)誤峭竣,繼而導(dǎo)致最終服務(wù)的http 500內(nèi)部服務(wù)器錯(cuò)誤灶伊。
解決方案
最方便的就是往請(qǐng)求頭加上token廓潜,一起帶過(guò)去
具體實(shí)現(xiàn)
Feign有提供一個(gè)接口丽焊,RequestInterceptor妹窖;只要實(shí)現(xiàn)這個(gè)接口啊奄,簡(jiǎn)單做一些處理渐苏。比如說(shuō)我們驗(yàn)證請(qǐng)求頭的token叫Access-Token,我們就先取出當(dāng)前請(qǐng)求的token菇夸,然后放到feign請(qǐng)求頭上
1.新建一個(gè)feign配置類(lèi)
@Configuration
public class FeignConfig implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
// 獲取當(dāng)前請(qǐng)求Spring信息
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
// 獲取請(qǐng)求體
HttpServletRequest request = attributes.getRequest();
// 獲取Header琼富、或參數(shù)等
String token = request.getHeader("xxx_token");
// 注入Feign請(qǐng)求體
requestTemplate.header( token );
}
}
2.在@FeignClient接口里添加configuration = {FeignConfig.class}
@FeignClient(name="被調(diào)用的服務(wù)名", configuration={FeignConfig.class})