中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Feign怎么解決服務之間調用傳遞token

發布時間:2022-03-15 16:56:16 來源:億速云 閱讀:485 作者:iii 欄目:開發技術

這篇“Feign怎么解決服務之間調用傳遞token”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Feign怎么解決服務之間調用傳遞token”文章吧。

解決服務之間調用傳遞token

現在的微服務基本就是SpringSecurity+Oauth3做的授權和認證,假如多個服務直接要通過Fegin來調用,會報錯401

  • a、有做權限處理的服務接口直接調用會造成調用時出現http 401未授權的錯誤,繼而導致最終服務的http 500內部服務器錯誤

  • b、解決方式:最方便的就是往請求頭里加上token,一起帶過去;

Feign有提供一個接口RequestInterceptor

只要實現這個接口,簡單做一些處理,比如說我們驗證請求頭的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();
    }

Feign調用服務各種坑處理

編寫被調用服務

@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相關配置

Feign怎么解決服務之間調用傳遞token

編寫調用api

Feign怎么解決服務之間調用傳遞token

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”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

齐河县| 乌拉特前旗| 屯昌县| 乡宁县| 西青区| 板桥市| 韶山市| 东宁县| 黑龙江省| 哈密市| 揭阳市| 闽侯县| 安岳县| 衡水市| 宾川县| 九台市| 玉山县| 武隆县| 屯门区| 巴里| 梅州市| 汾阳市| 灌阳县| 大竹县| 汽车| 呼图壁县| 女性| 横山县| 墨江| 鄯善县| 京山县| 铅山县| 苏州市| 桦甸市| 峨山| 余江县| 深水埗区| 古丈县| 曲周县| 嵩明县| 大同市|