亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

后臺系統(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, "請先登錄");
            }
            // 驗(yàn)證 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, "令牌未識別");
            }
            // 過期時(shí)間
            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) {
                // 登錄超時(shí)
                return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "登錄超時(shí)");
            }
            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層代碼實(shí)現(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)文章

  • 使用eclipse導(dǎo)入javaWeb項(xiàng)目的圖文教程

    使用eclipse導(dǎo)入javaWeb項(xiàng)目的圖文教程

    這篇文章主要介紹了如何使用eclipse導(dǎo)入別人的javaWeb項(xiàng)目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java連接數(shù)據(jù)庫增、刪、改、查工具類

    java連接數(shù)據(jù)庫增、刪、改、查工具類

    這篇文章主要介紹了java連接數(shù)據(jù)庫增、刪、改、查工具類,需要的朋友可以參考下
    2014-05-05
  • 解決RestTemplate加@Autowired注入不了的問題

    解決RestTemplate加@Autowired注入不了的問題

    這篇文章主要介紹了解決RestTemplate加@Autowired注入不了的問題,具有很好的參考價(jià)值,希望對大家有所幫助。
    2021-08-08
  • Java中的byte & 0xff到底有什么作用?

    Java中的byte & 0xff到底有什么作用?

    這篇文章主要介紹了Java中的byte & 0xff到底有什么作用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java語言通過三種方法實(shí)現(xiàn)隊(duì)列的示例代碼

    Java語言通過三種方法實(shí)現(xiàn)隊(duì)列的示例代碼

    這篇文章主要介紹了Java語言通過三種方法來實(shí)現(xiàn)隊(duì)列的實(shí)例代碼,數(shù)組模擬隊(duì)列,通過對定義的了解,發(fā)現(xiàn)隊(duì)列很像我們的數(shù)組,下面我們通過實(shí)踐給大家詳細(xì)介紹,需要的朋友可以參考下
    2022-02-02
  • java迭代器中刪除元素的實(shí)例操作詳解

    java迭代器中刪除元素的實(shí)例操作詳解

    在本篇內(nèi)容里小編給各位分享了一篇關(guān)于java迭代器中刪除元素的實(shí)例操作詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • Spring Cloud Alibaba 之 Nacos教程詳解

    Spring Cloud Alibaba 之 Nacos教程詳解

    Nacos是阿里的一個(gè)開源產(chǎn)品,它是針對微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)、配置管理、服務(wù)治理的綜合性解決方案。這篇文章主要介紹了Spring Cloud Alibaba 之 Nacos的相關(guān)知識,需要的朋友可以參考下
    2020-11-11
  • Springboot基礎(chǔ)之RedisUtils工具類

    Springboot基礎(chǔ)之RedisUtils工具類

    本文來說下RedisUtils工具類,主要介紹了整合Redis、MyBatis,封裝RedisUtils工具類等知識,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 解決slf4j 和 logback-classic遇到的坑

    解決slf4j 和 logback-classic遇到的坑

    這篇文章主要介紹了解決slf4j 和 logback-classic遇到的坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springBoot項(xiàng)目啟動類啟動無法訪問的解決方法

    springBoot項(xiàng)目啟動類啟動無法訪問的解決方法

    這篇文章主要介紹了springBoot項(xiàng)目啟動類啟動無法訪問的解決方法,需要的朋友可以參考下
    2018-10-10

最新評論