最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring cloud zuul增加header傳輸?shù)牟僮?/h1>
 更新時間:2021年06月25日 10:18:06   作者:zhuwei_clark  
這篇文章主要介紹了spring cloud zuul增加header傳輸?shù)牟僮鳎哂泻芎玫膮⒖純r值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

spring cloud zuul增加header傳輸

在使用OAuth2.0傳輸權(quán)限認(rèn)證,為了再調(diào)用其他的項目的時候獲取token,必須在token下傳到其他各個服務(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 通過getHeader方法獲取獲取Token值即可,然后在傳給其他調(diào)用

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

在使用 springcloud zuul 進(jìn)行轉(zhuǎn)發(fā)請求到各個對應(yīng)的服務(wù)中, 像 校驗 請求權(quán)限之類的可以放 zuul的攔截器中,有些時候我們就需要增加或者減傷轉(zhuǎn)發(fā)時帶過去的對應(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ù)可以直接 去取,就想普通的一樣,框架會直接注入進(jìn)去
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("1");
        requestQueryParams.put("test", arrayList);
        ctx.setRequestQueryParams(requestQueryParams);
    }

就簡單幾行代碼,重要的是最后一行

ctx.setRequestQueryParams(requestQueryParams);

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

也就是說zuul在轉(zhuǎn)發(fā)請求的時候,最終取的是這個.

然后 是 [注1], 這個地方, 一般來說,如果你的filter 的 filterOrder() 也就是過濾器順序設(shè)定的比較晚,可以不需要這一行代碼,(之所以這樣是因為在源碼中,后續(xù)的攔截器會執(zhí)行這樣一段程序:將所有傳遞的參數(shù)取出來,再setRequestQueryParams 中,執(zhí)行順序晚就 是框架中設(shè)定的filter執(zhí)行過一次了)

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

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

就是這種

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

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

還有一種將信息放到header 通過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")

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

相關(guān)文章

  • 精致小巧的java相冊制作方法

    精致小巧的java相冊制作方法

    這篇文章主要為大家詳細(xì)介紹了精致小巧的java相冊制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • SpringMVC前后端傳值的幾種實(shí)現(xiàn)方式

    SpringMVC前后端傳值的幾種實(shí)現(xiàn)方式

    本文主要介紹了SpringMVC前后端傳值的方式實(shí)現(xiàn),包括使用HttpServletRequest、HttpSession、Model和ModelAndView等方法,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • Java Chassis3注冊中心分區(qū)隔離技術(shù)解密

    Java Chassis3注冊中心分區(qū)隔離技術(shù)解密

    這篇文章主要為大家介紹了Java Chassis3注冊中心分區(qū)隔離技術(shù)解密,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Java+Redis撤銷重做功能實(shí)現(xiàn)

    Java+Redis撤銷重做功能實(shí)現(xiàn)

    這篇文章主要介紹了Java+Redis實(shí)現(xiàn)撤銷重做功能,需要考慮撤銷的最大步數(shù),撤銷之后穿插著其他操作則不能再重做,所以引入分布式鎖Redisson進(jìn)行加鎖處理,防止對圖表的操作有并發(fā)請求導(dǎo)致處理撤銷邏輯混亂,感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • SpringBoot動態(tài)定時功能實(shí)現(xiàn)方案詳解

    SpringBoot動態(tài)定時功能實(shí)現(xiàn)方案詳解

    在SpringBoot項目中簡單使用定時任務(wù),不過由于要借助cron表達(dá)式且都提前定義好放在配置文件里,不能在項目運(yùn)行中動態(tài)修改任務(wù)執(zhí)行時間,實(shí)在不太靈活。現(xiàn)在我們就來實(shí)現(xiàn)可以動態(tài)修改cron表達(dá)式的定時任務(wù),感興趣的可以了解一下
    2022-11-11
  • Java instanceof關(guān)鍵字的的進(jìn)一步理解

    Java instanceof關(guān)鍵字的的進(jìn)一步理解

    這篇文章主要介紹了Java instanceof關(guān)鍵字的的進(jìn)一步理解,本文用一些實(shí)例講解了instanceof操作符的一些知識,需要的朋友可以參考下
    2015-03-03
  • 史上最難的一道Java面試題

    史上最難的一道Java面試題

    本文給大家分享一道史上最難的一道Java面試題,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • Java線程安全基礎(chǔ)概念解析

    Java線程安全基礎(chǔ)概念解析

    這篇文章主要介紹了Java線程安全基礎(chǔ)概念解析,希望給大家一個參考,需要的朋友可以了解下。
    2017-09-09
  • 使用Java實(shí)現(xiàn)構(gòu)建jenkins的多個job并返回構(gòu)建結(jié)果示例

    使用Java實(shí)現(xiàn)構(gòu)建jenkins的多個job并返回構(gòu)建結(jié)果示例

    這篇文章主要介紹了使用Java實(shí)現(xiàn)構(gòu)建jenkins的多個job并返回構(gòu)建結(jié)果示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • java啟動jar包修改JVM默認(rèn)內(nèi)存問題

    java啟動jar包修改JVM默認(rèn)內(nèi)存問題

    這篇文章主要介紹了java啟動jar包修改JVM默認(rèn)內(nèi)存問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

昌黎县| 文登市| 鄂温| 喜德县| 阿图什市| 根河市| 临城县| 墨江| 交口县| 佛教| 太白县| 乃东县| 比如县| 富民县| 涟源市| 乌兰浩特市| 民县| 镇江市| 富川| 镇安县| 治县。| 饶河县| 沙田区| 万源市| 苏尼特右旗| 酒泉市| 进贤县| 科技| 永福县| 图们市| 察哈| 上饶市| 军事| 龙南县| 清苑县| 孝昌县| 兴海县| 卓资县| 抚州市| 依兰县| 清新县|