您好,登錄后才能下訂單哦!
這篇“Feign怎么解決服務之間調用傳遞token”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Feign怎么解決服務之間調用傳遞token”文章吧。
現在的微服務基本就是SpringSecurity+Oauth3做的授權和認證,假如多個服務直接要通過Fegin來調用,會報錯401
a、有做權限處理的服務接口直接調用會造成調用時出現http 401未授權的錯誤,繼而導致最終服務的http 500內部服務器錯誤
b、解決方式:最方便的就是往請求頭里加上token,一起帶過去;
只要實現這個接口,簡單做一些處理,比如說我們驗證請求頭的token叫Access-Token,我們就先取出當前請求的token,然后放到feign請求頭上;
public class FeignConfig implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //添加token requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION)); } }
@FeignClient(name = "qtjuaa", configuration = FeignConfig.class) public interface UaaClient { @RequestMapping(value = "/api/test", method= RequestMethod.GET) String test(); }
@RefreshScope @RestController public class XXXController extends BaseController implements IndicatorsFeignApi{ @Resource private XXXService xxx; @Override public Wrapper<CommonVo> getXXXX(@RequestBody CommonDto commonDto) { try { CommonVo vo = xxx.getdata(commonDto); return WrapMapper.ok(vo); }catch(Exception e) { e.printStackTrace(); return WrapMapper.error("系統異常,請聯系管理員!"); } } } //Service不進行展示,注意參數傳遞至service層時要加入注解@RequestBody等才能獲取參數
在配置文件添加feign相關配置
pom文件中添加相關依賴
org.springframework.cloud spring-cloud-starter-hystrix org.springframework.cloud spring-cloud-starter-netflix-hystrix-dashboard
調用Api
@FeignClient(value = "被調用服務名") public interface IndicatorsFeignApi { @PostMapping(value = "/api/getXXXX",consumes="application/json", headers = {"Accept=application/json", "Content-Type=application/json"}) Wrapper<CommonVo> getXXXX(@RequestBody CommonDto commonDto); }
Feign調用錯誤處理,發生相關錯誤是會跳轉至fallback處理
@Component public class IndicatorsFeignApiHystrix implements IndicatorsFeignApi { @Override public Wrapper<CommonVo> getXXXX(CommonDto commonDto) { System.out.println("=====調用服務獲數據發生異常======"); return null; } }
當啟用fallback后,有些報錯不會打印在控制臺上,這時可以修改配置中的
feign: hystrix: enabled: true
將enabled改為false,錯誤發生后將不會跳轉fallback。
此處有一個坑,當時調用的時候服務是可以調用成功的,但是有一個報錯:
Could not extract response: no suitable HttpMessageConverter found for response type [XXXX] and content type [text/html;charset=UTF-8]
貌似是返回數據的編碼與接收實體類不一樣,導致報錯。加上headers = {"Accept=application/json", "Content-Type=application/json"}解決了相關問題.
//serviceImp層 @Autowired private IndicatorsFeignApi api;//聲明調用api @Override public CommonVo getXXX(CommonDto commonDto) { Wrapper<CommonVo> result = api.getXXXX(commonDto);//服務調用 if(result!=null) { return result.getResult(); }else { return new CommonVo(); } }
以上就是關于“Feign怎么解決服務之間調用傳遞token”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。