国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Feign 調(diào)用出現(xiàn)異常:feign.FeignException: status 401 reading xxx#xxx(xxx)

這篇具有很好參考價值的文章主要介紹了Feign 調(diào)用出現(xiàn)異常:feign.FeignException: status 401 reading xxx#xxx(xxx)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

異常描述

微服務(wù) Controller 層方法通過 Feign 調(diào)用某個微服務(wù)方法,出現(xiàn)以下異常:

feign.FeignException: status 401 reading UserFeign#updateLoginTime(Integer)
	at feign.FeignException.errorStatus(FeignException.java:78)
	at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:93)
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:149)
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78)
	at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
	at com.sun.proxy.$Proxy103.updateLoginTime(Unknown Source)

異常原因

權(quán)限校驗(yàn)失敗
即有某個地方會校驗(yàn)該 Feign 請求的授權(quán)信息,然后未通過,返回了 401 這個錯誤碼
不一定是 Feign 本身的權(quán)限校驗(yàn),雖然是 Feign 報的異常
一開始因?yàn)槭?Feign 報的異常,我就開始找 Feign 請求攔截器等,但是一無所獲
后來發(fā)現(xiàn),是因?yàn)?Feign 請求中缺失 Cookie,導(dǎo)致被網(wǎng)關(guān)攔截器攔截

異常分析

我的安全校驗(yàn)邏輯如下: 非登錄請求進(jìn)入網(wǎng)關(guān)后,校驗(yàn) cookie,根據(jù) cookie 值,從 Redis 中取出 JWT,并存入請求頭中
每個微服務(wù)會解析請求頭中的 JWT,以此獲取登錄用戶信息

前端的請求進(jìn)入 Controller 中后,Controller 的方法再調(diào)用 Feign
此時的 Feign 請求是獲取不到請求頭的,微服務(wù)也就無法獲取登錄用戶信息

所以我在微服務(wù)中增加了 Feign 攔截器,用來增強(qiáng)請求:將前端請求中的請求頭信息存入 Feign 請求中:

/**
 * Feign 調(diào)用增強(qiáng)請求頭,防止登錄信息無法傳遞而被服務(wù)攔截
 *
 * @author Eugenema
 * @date 2022/7/30 12:05
 */
@Component
public class FeignInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        //獲取客戶端訪問的請求
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if(requestAttributes != null){
            HttpServletRequest request = requestAttributes.getRequest();
            if (request != null) {
                String token = request.getHeader("Authorization");

                //同步到 feign 請求中
                requestTemplate.header("Authorization", token);
                return;
            }
        }
    }
}
但是
我的 Feign 調(diào)用,配置的是網(wǎng)關(guān),而不是具體的某個微服務(wù)
/**
 * 用戶 feign 調(diào)用
 *
 * @author Eugenema
 * @date 2022/7/23 17:16
 */
@FeignClient(contextId = "userService", name = "gatewayService", path = "/userService")
@RequestMapping("/user")
public interface UserFeign {
……
}

故,F(xiàn)eign 請求會先經(jīng)過 Feign 攔截器,將請求頭加入到請求中
然后再經(jīng)過網(wǎng)關(guān)攔截器,結(jié)果網(wǎng)關(guān)攔截器會先檢查 Cookie 是否存在:很明顯,不存在?。。?br> 于是網(wǎng)關(guān)攔截器就攔截了,然后 Feign 調(diào)用就報錯了……

異常解決

在 Feign 請求攔截器中,除了增強(qiáng)請求頭外,把 Cookie 也加上

/**
 * Feign 調(diào)用增強(qiáng)請求頭,防止登錄信息無法傳遞而被服務(wù)攔截
 *
 * @author Eugenema
 * @date 2022/7/30 12:05
 */
@Component
public class FeignInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        //獲取客戶端訪問的請求
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if(requestAttributes != null){
            HttpServletRequest request = requestAttributes.getRequest();
            if (request != null) {
                String cookie = request.getHeader("Cookie");
                String token = request.getHeader("Authorization");

                //同步到 feign 請求中
                requestTemplate.header("Cookie", cookie);
                requestTemplate.header("Authorization", token);
                return;
            }
        }
    }
}

疑問

因?yàn)楫惓J窃?Feign 中報出來的,且我的網(wǎng)關(guān)攔截器是會對攔截下來的請求打印日志的
但是網(wǎng)關(guān)當(dāng)時并沒有日志打印,所以一開始沒有往這邊想
不太清楚是因?yàn)樯?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-453236.html

到了這里,關(guān)于Feign 調(diào)用出現(xiàn)異常:feign.FeignException: status 401 reading xxx#xxx(xxx)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Cloud Feign調(diào)用異常:feign.RetryableException: connect timed out executing POST http://xxx

    本機(jī)JUnit單元測試時,調(diào)用部署在開發(fā)環(huán)境(Centos7)的服務(wù)時,報feign.RetryableException: connect timed out 直接訪問服務(wù)地址時,提示網(wǎng)絡(luò)無法訪問 http://192.168.1.15:7002/comDictionary/getDictionaryById?dictionaryId=GIVE_LOGIN 發(fā)現(xiàn)端口沒有打開。需要打開linux防火墻的端口 firewall-cmd --permanent --zon

    2024年03月22日
    瀏覽(22)
  • springboot - feign.FeignException$BadRequest: [400] during [GET] to [http:

    springboot - feign.FeignException$BadRequest: [400] during [GET] to [http:

    ERROR 失敗原因: feign.FeignException$BadRequest: [400] during [GET] to [http://方法?攜帶的請求頭條件。。。。。 [ManualStockControllerFeign#deleteManualStockTaskByIds(List)]: !doctype htmlhtml lang=\\\"en\\\"headtitleHTTP Status 400 – Bad Request/titlestyle type=\\\"text/css\\\"body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;ba

    2024年02月02日
    瀏覽(16)
  • 【問題解決】feign.FeignException$ServiceUnavailable: [503] during [GET] to [http://stock-query/stock/query

    【問題解決】feign.FeignException$ServiceUnavailable: [503] during [GET] to [http://stock-query/stock/query

    問題描述: 錯誤信息顯示為`feign.FeignException$ServiceUnavailable: [503]`,這表示服務(wù)不可用,即服務(wù)器無法處理請求。錯誤消息還指出負(fù)載均衡器中沒有包含該服務(wù)的實(shí)例。 1. 服務(wù)不可用:出現(xiàn)503錯誤通常表示目標(biāo)服務(wù)當(dāng)前無法提供服務(wù)。這可能是由于服務(wù)器維護(hù)、過載或其他故障

    2024年02月15日
    瀏覽(18)
  • feign自定義第三方接口;配置化Feign接口URL;調(diào)用指定IP的feign服務(wù)

    最近接手一個項(xiàng)目,各子工程之間通過feign調(diào)用;各服務(wù)部署在K8S上,通過nacos管理配置;由于服務(wù)部署的機(jī)器無法開放端口等原因,導(dǎo)致本機(jī)服務(wù)與測試環(huán)境網(wǎng)絡(luò)端口無法互通,故需要重寫feign的調(diào)用地址;個人總結(jié)的方法有以下幾種: 目錄 ?第一種:feignclient配置URL 第二種

    2024年02月04日
    瀏覽(23)
  • Java 【dubbo rpc改feign調(diào)用】feign接口調(diào)用 Body parameter 4 was null

    【框架改造問題點(diǎn)記錄,dubbo改為spring cloud alibaba】 【第四篇】feign接口調(diào)用 Body parameter 4 was null 【描述】Feign是一個聲明式的Web服務(wù)客戶端,它使得寫HTTP客戶端變得更簡單。如果你在使用Feign進(jìn)行服務(wù)調(diào)用時遇到了\\\"Body parameter 4 was null\\\"這樣的錯誤,這通常意味著你嘗試將一個

    2024年02月11日
    瀏覽(18)
  • postman調(diào)用feign接口

    postman調(diào)用feign接口

    1、同postman調(diào)用controller接口差不多,url指定為:服務(wù)地址+@FeignClient中的path+具體方法名

    2024年02月16日
    瀏覽(21)
  • [RPC]:Feign遠(yuǎn)程調(diào)用

    [RPC]:Feign遠(yuǎn)程調(diào)用

    摘要:RestTemplate;Feign;遠(yuǎn)程調(diào)用; Feign是一個簡化HTTP客戶端編寫的框架,通過聲明式方式將遠(yuǎn)程服務(wù)調(diào)用封裝成簡單接口調(diào)用。 1.2.1 使用RestTemplate發(fā)送遠(yuǎn)程調(diào)用代碼 要求:系統(tǒng)調(diào)用者在查詢訂單的同時,根據(jù)訂單中包含的userId查詢出用戶信息,一起返回。 1.2.1.1 項(xiàng)目示例

    2024年02月10日
    瀏覽(22)
  • SpringCloud --- Feign遠(yuǎn)程調(diào)用

    SpringCloud --- Feign遠(yuǎn)程調(diào)用

    先來看我們以前利用RestTemplate發(fā)起遠(yuǎn)程調(diào)用的代碼: 存在下面的問題: 代碼可讀性差,編程體驗(yàn)不統(tǒng)一 參數(shù)復(fù)雜URL難以維護(hù) Feign是一個聲明式的http客戶端,官方地址:GitHub - OpenFeign/feign: Feign makes writing java http clients easier 其作用就是幫助我們優(yōu)雅的實(shí)現(xiàn)http請求的發(fā)送,解決

    2024年02月05日
    瀏覽(18)
  • 搭建feign遠(yuǎn)程調(diào)用環(huán)境

    在我的SpringCloud專欄中已經(jīng)介紹過SpringCloud五大組件的環(huán)境搭建,各個環(huán)境的搭建都有詳細(xì)的步驟講解,之前我們說過各個服務(wù)搭建都是不依賴于之前的環(huán)境的,本節(jié)介紹的Feign服務(wù)間遠(yuǎn)程調(diào)用也是,本次也是側(cè)重于環(huán)境搭建,F(xiàn)eign的作用我們之前已經(jīng)介紹過了??梢圆榭矗?

    2024年01月17日
    瀏覽(23)
  • 微服務(wù)遠(yuǎn)程調(diào)用Feign

    微服務(wù)遠(yuǎn)程調(diào)用Feign

    目錄 RPC概述 什么是Feign? RibbonFeign對比 Feign的設(shè)計架構(gòu) Spring Cloud Alibaba快速整合Feign Spring Cloud Feign擴(kuò)展 日志配置 契約配置 通過攔截器實(shí)現(xiàn)參數(shù)傳遞 自定義攔截器實(shí)現(xiàn)認(rèn)證邏輯 超時時間配置 微服務(wù)之間如何方便優(yōu)雅的實(shí)現(xiàn)服務(wù)間的遠(yuǎn)程調(diào)用? RPC 全稱是 Remote Procedure Call ,

    2024年03月14日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包