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

springcloud如何獲取網(wǎng)關(guān)封裝的頭部信息

 更新時間:2022年06月17日 10:35:32   作者:一一可可  
這篇文章主要介紹了springcloud獲取網(wǎng)關(guān)封裝的頭部信息,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

后臺系統(tǒng)如何獲取請求頭里的數(shù)據(jù)

1. 網(wǎng)關(guān)層封裝數(shù)據(jù)到head頭

@Component
@Slf4j
public class LoginGatewayFilterFactory extends AbstractGatewayFilterFactory {
 
    @Override
    public GatewayFilter apply(Object config) {
        return (exchange, chain) -> {
            // 獲取 request
            ServerHttpRequest req = exchange.getRequest();
            URI uri = req.getURI();
            // 日志
            log.info(StringUtils.join("【", req.getMethod(), "】", uri.getHost(), ":", uri.getPort(), ", 【path】", uri.getPath()));
            // 檢查請求 uri 是否需要鑒權(quán)
            String path = uri.getPath();
            if (StringUtils.equalsAny(path, "/sysLogin")) {
                return chain.filter(exchange);
            }
            // 獲取請求的 token
            HttpHeaders reqHeaders = req.getHeaders();
            String token = req.getHeaders().getFirst("token");
            if (StringUtils.isBlank(token)) {
                return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "請先登錄");
            }
            // 驗證 token
            JWT jwt = JWTUtil.parseToken(token);
            if (jwt == null) {
                log.info(StringUtils.join("[token=", token, "]轉(zhuǎn)換為jwt失敗"));
                return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未識別");
            }
            JSONObject json = jwt.getPayloads();
            if (json == null || json.isEmpty() || json.isNull("key") || json.isNull(JWTPayload.ISSUED_AT)) {
                log.info(StringUtils.join("[token=", token, "]解析異常"));
                return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未識別");
            }
            String userId = json.get("key", String.class);
            if (StringUtils.isBlank(userId)) {
                return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未識別");
            }
            boolean verify = jwt.setKey(JwtUtils.createKey(userId)).verify();
            if (!verify) {
                return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未識別");
            }
            // 過期時間
            long seconds = Instant.now().getEpochSecond() - json.get(JWTPayload.ISSUED_AT, Long.class);
            if (seconds < 0) {
                return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未識別");
            } else if (seconds >= 1500 && seconds <= 1800) {
                // 自動刷新令牌
                ServerHttpResponse httpResponse = exchange.getResponse();
                HttpHeaders repHeaders = httpResponse.getHeaders();
                repHeaders.set("token", JwtUtils.createToken(userId));
            } else if (seconds > 1800) {
                // 登錄超時
                return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "登錄超時");
            }
            Consumer<HttpHeaders> headersConsumer = httpHeaders -> {
                for (Map.Entry<String, List<String>> entry : reqHeaders.entrySet()) {
                    httpHeaders.put(entry.getKey(), entry.getValue());
                }
                httpHeaders.add("userId", userId);
            };
            return chain.filter(exchange.mutate().request(req.mutate().headers(headersConsumer).build()).build());
        };
    }
 
}

2. controller層代碼實現(xiàn)

    @ApiOperation(value = "添加")
    @PostMapping("")
    public PojoBaseResponse<Boolean> add(@RequestBody @Validated MainRouteDTO vo, @RequestHeader String userId) {
        return ResponseUtils.pojo(mainRouteService.add(vo, userId));
    }

到此這篇關(guān)于springcloud獲取網(wǎng)關(guān)封裝的的文章就介紹到這了,更多相關(guān)springcloud網(wǎng)關(guān)頭部信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • try catch finally的執(zhí)行順序深入分析

    try catch finally的執(zhí)行順序深入分析

    首先執(zhí)行try,如果有異常執(zhí)行catch,無論如何都會執(zhí)行finally,當(dāng)有return以后,函數(shù)就會把這個數(shù)據(jù)存儲在某個位置,然后告訴主函數(shù),我不執(zhí)行了,接下來你執(zhí)行吧,所以函數(shù)就會推出
    2013-09-09
  • 使用Java 8 Lambda表達式將實體映射到DTO的操作

    使用Java 8 Lambda表達式將實體映射到DTO的操作

    這篇文章主要介紹了使用Java 8 Lambda表達式將實體映射到DTO的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 詳解如何將springboot項目導(dǎo)出成war包

    詳解如何將springboot項目導(dǎo)出成war包

    這篇文章主要介紹了詳解如何將springboot項目導(dǎo)出成war包,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java實現(xiàn)按年月打印日歷功能【基于Calendar】

    Java實現(xiàn)按年月打印日歷功能【基于Calendar】

    這篇文章主要介紹了Java實現(xiàn)按年月打印日歷功能,涉及java基于Calendar進行日期運算的相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 實時計算知多少?

    實時計算知多少?

    這篇文章對滑動窗口計數(shù)的概念和關(guān)鍵代碼做了較為詳細解釋,讓我們對實時計算這一概念有了更深的了解,需要的朋友可以參考下
    2015-07-07
  • Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析

    Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析

    這篇文章主要介紹了Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Java?Base64編碼方法詳解及實例解析

    Java?Base64編碼方法詳解及實例解析

    Base64是一種用于將二進制數(shù)據(jù)轉(zhuǎn)換成文本數(shù)據(jù)的編碼方式,在本文中,我們介紹了Base64.encodeBase64String方法的用途和功能,它是Java語言中用于Base64編碼的一個重要工具,需要的朋友可以參考下
    2023-09-09
  • 詳解java內(nèi)部類的訪問格式和規(guī)則

    詳解java內(nèi)部類的訪問格式和規(guī)則

    在本文里我們給大家詳細分享了關(guān)于java內(nèi)部類的訪問格式和規(guī)則知識點內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2018-10-10
  • Java并發(fā)編程之ReentrantLock實現(xiàn)原理及源碼剖析

    Java并發(fā)編程之ReentrantLock實現(xiàn)原理及源碼剖析

    ReentrantLock 是常用的鎖,相對于Synchronized ,lock鎖更人性化,閱讀性更強,文中將會詳細的說明,請君往下閱讀
    2021-09-09
  • SpringBoot依賴注入的詳細介紹、使用技巧

    SpringBoot依賴注入的詳細介紹、使用技巧

    在Spring Boot中,依賴注入是一項關(guān)鍵的特性,它通過容器來管理和注入應(yīng)用程序中的各種組件,本文介紹SpringBoot依賴注入的詳細介紹、使用技巧,感興趣的朋友一起看看吧
    2024-01-01

最新評論

郁南县| 宁安市| 新乡市| 张家港市| 布尔津县| 新化县| 光泽县| 本溪| 卫辉市| 两当县| 铜山县| 四平市| 长沙市| 石河子市| 盖州市| 泉州市| 织金县| 若羌县| 衡南县| 宜宾市| 丰原市| 木兰县| 扬州市| 灯塔市| 宁都县| 武定县| 隆尧县| 昭平县| 鄢陵县| 永定县| 淮安市| 榆社县| 彰化县| 英吉沙县| 天峻县| 米易县| 新安县| 响水县| 潞城市| 和静县| 利川市|