欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring cloud zuul增加header傳輸?shù)牟僮?/h1>
 更新時(shí)間:2021年06月25日 10:18:06   作者:zhuwei_clark  
這篇文章主要介紹了spring cloud zuul增加header傳輸?shù)牟僮?,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring cloud zuul增加header傳輸

在使用OAuth2.0傳輸權(quán)限認(rèn)證,為了再調(diào)用其他的項(xiàng)目的時(shí)候獲取token,必須在token下傳到其他各個(gè)服務(wù)

@Component
public class KeyUserFilter extends ZuulFilter {
    private static final Logger logger = LoggerFactory.getLogger(KeyUserFilter.class);
    @Override
    public Object run() {
        // TODO Auto-generated method stub
        String keyCloakUser = CurrentUser.getInstance().getCurrentAuditor();
        String keyCloakUserName = CurrentUser.getInstance().getCurrentAuditorName();
        String nickname = CurrentUser.getInstance().getCurrentNickname();
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest req = (HttpServletRequest)RequestContext.getCurrentContext().getRequest();
        requestContext.addZuulRequestHeader("authorization", req.getHeader("authorization"));
        return null;
    }
    
    @Override
    public boolean shouldFilter() {
        // TODO Auto-generated method stub
        return true; //表示是否需要執(zhí)行該filter,true表示執(zhí)行,false表示不執(zhí)行
    }
    @Override
    public int filterOrder() {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public String filterType() {
        // TODO Auto-generated method stub
        return "pre"; //定義filter的類型,有pre、route、post、error四種
    }
}

在其他服務(wù)中,使用HttpServletRequest 通過(guò)getHeader方法獲取獲取Token值即可,然后在傳給其他調(diào)用

spring cloud zuul 修改轉(zhuǎn)發(fā)傳遞的參數(shù)

在使用 springcloud zuul 進(jìn)行轉(zhuǎn)發(fā)請(qǐng)求到各個(gè)對(duì)應(yīng)的服務(wù)中, 像 校驗(yàn) 請(qǐng)求權(quán)限之類的可以放 zuul的攔截器中,有些時(shí)候我們就需要增加或者減傷轉(zhuǎn)發(fā)時(shí)帶過(guò)去的對(duì)應(yīng)的一些參數(shù).

貼增加轉(zhuǎn)發(fā)參數(shù)的代碼

    public static void  setReqParams()  {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        // 一定要get一下,下面這行代碼才能取到值... [注1]
        request.getParameterMap();
        Map<String, List<String>> requestQueryParams = ctx.getRequestQueryParams();
        if (requestQueryParams==null) {
            requestQueryParams=new HashMap<>();
        }
        //將要新增的參數(shù)添加進(jìn)去,被調(diào)用的微服務(wù)可以直接 去取,就想普通的一樣,框架會(huì)直接注入進(jìn)去
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("1");
        requestQueryParams.put("test", arrayList);
        ctx.setRequestQueryParams(requestQueryParams);
    }

就簡(jiǎn)單幾行代碼,重要的是最后一行

ctx.setRequestQueryParams(requestQueryParams);

這個(gè)put(“requestQueryParams”, qp); 是在源碼中 會(huì)在轉(zhuǎn)發(fā)的時(shí)候去取這個(gè)key里面的參數(shù)值.

也就是說(shuō)zuul在轉(zhuǎn)發(fā)請(qǐng)求的時(shí)候,最終取的是這個(gè).

然后 是 [注1], 這個(gè)地方, 一般來(lái)說(shuō),如果你的filter 的 filterOrder() 也就是過(guò)濾器順序設(shè)定的比較晚,可以不需要這一行代碼,(之所以這樣是因?yàn)樵谠创a中,后續(xù)的攔截器會(huì)執(zhí)行這樣一段程序:將所有傳遞的參數(shù)取出來(lái),再setRequestQueryParams 中,執(zhí)行順序晚就 是框架中設(shè)定的filter執(zhí)行過(guò)一次了)

但是如果你的執(zhí)行順序是0 也就是最先執(zhí)行的話,這樣代碼必不可少,如果沒(méi)有這行代碼,將不會(huì)有值,也就無(wú)法達(dá)到修改傳遞參數(shù)的目的.(之前 沒(méi)有查看源碼和文檔,還傻乎乎的把從request里面取出來(lái)的值 一個(gè)一個(gè)給set進(jìn)去,導(dǎo)致參數(shù)重復(fù).)

這里可以將 定義為流的方式的參數(shù)取出來(lái),set進(jìn)去,方便后面的微服務(wù)獲取.減少相關(guān)取值代碼

就是這種

ServletInputStream inputStream = request.getInputStream();
String copyToString = StreamUtils.copyToString(inputStream, Charset.forName(“UTF-8”));

取出來(lái)是字符串(字符串的格式j(luò)son或者xml都行) 然后set進(jìn)去即可

還有一種將信息放到header 通過(guò)header傳遞

缺點(diǎn):header傳遞中文需要特殊處理不然亂碼

網(wǎng)關(guān)

RequestContext ctx = RequestContext.getCurrentContext();  
ctx.addZuulRequestHeader("original_requestURL",request.getRequestURL().toString());

子系統(tǒng)

request.getHeader("original_requestURL")

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring?boot集成jasypt?并實(shí)現(xiàn)自定義加解密的詳細(xì)步驟

    spring?boot集成jasypt?并實(shí)現(xiàn)自定義加解密的詳細(xì)步驟

    由于項(xiàng)目中的配置文件?配置的地方過(guò)多,現(xiàn)將配置文件統(tǒng)一放到nacos上集中管理?且密碼使用加密的方式放在配置文件中,配置文件的加密使用加密庫(kù)jasypt,本文給大家介紹spring boot集成jasypt并實(shí)現(xiàn)自定義加解密,感興趣的朋友一起看看吧
    2023-08-08
  • Java獲取視頻時(shí)長(zhǎng)及截取幀截圖詳解

    Java獲取視頻時(shí)長(zhǎng)及截取幀截圖詳解

    這篇文章主要介紹了Java獲取視頻時(shí)長(zhǎng)及截取幀截圖詳解,以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。,需要的朋友可以參考下
    2019-06-06
  • Mybatis中3種關(guān)聯(lián)關(guān)系的實(shí)現(xiàn)方法示例

    Mybatis中3種關(guān)聯(lián)關(guān)系的實(shí)現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于Mybatis中3種關(guān)聯(lián)關(guān)系的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java中關(guān)于OAuth2.0的原理分析

    Java中關(guān)于OAuth2.0的原理分析

    這篇文章主要介紹了Java中關(guān)于OAuth2.0的原理分析,OAuth是一個(gè)關(guān)于授權(quán)的開放網(wǎng)絡(luò)標(biāo)準(zhǔn),允許用戶授權(quán)第三 方應(yīng)用訪問(wèn)他們存儲(chǔ)在另外的服務(wù)提供者上的信息,而不需要將用戶名和密碼提供給第三方移動(dòng)應(yīng)用或分享他們數(shù)據(jù)的所有內(nèi)容,需要的朋友可以參考下
    2023-09-09
  • springAop實(shí)現(xiàn)講解(看這篇夠了)

    springAop實(shí)現(xiàn)講解(看這篇夠了)

    AOP面向切面編程是一種編程范式,它通過(guò)將通用的橫切關(guān)注點(diǎn)(如日志、事務(wù)、權(quán)限控制等)與業(yè)務(wù)邏輯分離,使得代碼更加清晰、簡(jiǎn)潔、易于維護(hù),這篇文章主要介紹了springAop實(shí)現(xiàn)講解(看這篇夠了),需要的朋友可以參考下
    2024-02-02
  • SpringBoot+Nacos+Kafka微服務(wù)流編排的簡(jiǎn)單實(shí)現(xiàn)

    SpringBoot+Nacos+Kafka微服務(wù)流編排的簡(jiǎn)單實(shí)現(xiàn)

    本文主要介紹了SpringBoot+Nacos+Kafka微服務(wù)流編排的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Spring Security實(shí)現(xiàn)微信公眾號(hào)網(wǎng)頁(yè)授權(quán)功能

    Spring Security實(shí)現(xiàn)微信公眾號(hào)網(wǎng)頁(yè)授權(quán)功能

    這篇文章主要介紹了Spring Security中實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java線程創(chuàng)建與Thread類的使用方法

    Java線程創(chuàng)建與Thread類的使用方法

    這篇文章主要介紹了Java線程創(chuàng)建與Thread類的使用方法,圍繞java多線程中Thread類的使用以及有關(guān)線程對(duì)象創(chuàng)建和常用方法的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的下伙伴可以參考一下
    2022-06-06
  • Spring Boot LocalDateTime格式化處理的示例詳解

    Spring Boot LocalDateTime格式化處理的示例詳解

    這篇文章主要介紹了Spring Boot LocalDateTime格式化處理的示例詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解

    Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解

    這篇文章主要介紹了Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解,Exchanger是一個(gè)用于線程間協(xié)作的工具類,Exchanger用于進(jìn)行線程間的數(shù)據(jù)交 換,它提供一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn),兩個(gè)線程可以交換彼此的數(shù)據(jù),需要的朋友可以參考下
    2023-12-12

最新評(píng)論