返回顶部
首页 > 资讯 > 后端开发 > Python >springcloud如何获取网关封装的头部信息
  • 300
分享到

springcloud如何获取网关封装的头部信息

2024-04-02 19:04:59 300人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

后台系统如何获取请求头里的数据 1. 网关层封装数据到head头 @Component @Slf4j public class LoginGatewayFilterFactory e

后台系统如何获取请求头里的数据

1. 网关层封装数据到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 是否需要鉴权
            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, "]转换为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层代码实现

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

到此这篇关于SpringCloud获取网关封装的的文章就介绍到这了,更多相关springcloud网关头部信息内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: springcloud如何获取网关封装的头部信息

本文链接: https://lsjlt.com/news/151794.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • springcloud如何获取网关封装的头部信息
    后台系统如何获取请求头里的数据 1. 网关层封装数据到head头 @Component @Slf4j public class LoginGatewayFilterFactory e...
    99+
    2024-04-02
  • android 封装抓取网页信息的实例代码
    代码如下:package cn.mypic;        import java.io.BufferedInputStre...
    99+
    2022-06-06
    封装 Android
  • PHP怎么获取指定网址的header头信息及隐藏关闭的方法
    这篇文章给大家分享的是有关PHP怎么获取指定网址的header头信息及隐藏关闭的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、PHP如何获取指定URL的header信息超级简单,就一行命令即可:<p...
    99+
    2023-06-14
  • Java 详解如何获取网络接口信息
    前言 查看本机的网络接口信息,本文有详细的介绍哦。 代码 不废话,上代码。 package com.hy.csdn.tools; import java.net.InetAd...
    99+
    2024-04-02
  • 小程序开发如何获取节点的相关信息
    本篇内容主要讲解“小程序开发如何获取节点的相关信息”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“小程序开发如何获取节点的相关信息”吧!获取节点的相关信息,需要获取的字段在fields中指定。返回...
    99+
    2023-06-26
  • JAVA如何获取jvm和操作系统相关信息
    目录 什么是JVM背景Jvm操作系统 什么是JVM JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个...
    99+
    2022-11-13
    JAVA获取jvm信息 JAVA获取操作系统信息
  • 微信小程序如何异步获取当前storage的相关信息
    这篇“微信小程序如何异步获取当前storage的相关信息”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“微信小程序如何异步获取当前storage的相关信息”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥...
    99+
    2023-06-26
  • 微信小程序如何同步获取当前storage的相关信息
    这篇文章主要为大家展示了微信小程序如何同步获取当前storage的相关信息,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“微信小程序如何同步获取当前storage的相关信息”这篇文章吧。同步获取当前...
    99+
    2023-06-26
  • Java如何实现获取和判断文件头信息工具类
    小编给大家分享一下Java如何实现获取和判断文件头信息工具类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java实现的获取和判断文件头信息工具类用法,具体如下:...
    99+
    2023-05-30
    java
  • linux如何获取一个已安装包的特殊信息
    ...
    99+
    2024-04-02
  • python os.stat()如何获取相关文件的系统状态信息
    目录python os.stat()获取相关文件的系统状态信息下面直接以一个具体示例来进行简要说明python os模块的常用操作python os.stat()获取相关文件的系统状...
    99+
    2024-04-02
  • 如何获取建站主机的ftp信息
    获取建站主机ftp信息的方法:FTP信息是由空间商提供的。登录到空间提供商平台。打开业务管理。选择虚拟主机管理。找到对应的主机,点击“管理”。在对话框中即可看到FTP信息。...
    99+
    2024-04-02
  • JVM中如何获取OOM时的堆信息
    这篇文章给大家分享的是有关JVM中如何获取OOM时的堆信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JVM的框架知识了解之后,实际的项目里发生了OOM异常的话,怎么获取以及分析异常信息后怎么分析呢。这里稍微做...
    99+
    2023-05-31
    jvm oom
  • 如何抽取exp/expdp导出文件头的信息
    小编给大家分享一下如何抽取exp/expdp导出文件头的信息,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!抽取exp和expdp的dump文件头信息,同时支持oracle 7.3.4以后的...
    99+
    2024-04-02
  • 如何在Linux中使用netstat命令获取网络信息
    这篇文章将为大家详细讲解有关如何在Linux中使用netstat命令获取网络信息,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。netstat - 显示网络连接,路由表,接口状态,伪装连接,网...
    99+
    2023-06-12
  • 如何通过zabbix获取数据库连接的信息及部分扩展
    本篇内容介绍了“如何通过zabbix获取数据库连接的信息及部分扩展”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景随着应用系统的不断增加,...
    99+
    2023-06-20
  • 详解如何使用Python网络爬虫获取招聘信息
    目录前言项目目标项目准备反爬措施项目实现效果展示小结前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息。可是招聘信息有一些是错综复杂的。而且不能把全部...
    99+
    2024-04-02
  • Java如何获取属性的注释信息详解
    前言 注解是JavaSE5.0开始提供的一项新特性,利用此特性可以通过特定的注解标签为程序提供一些描述性信息。这些描述性信息可以在编译或运行时为编译器、运行环境提供附加的信息,从而简...
    99+
    2024-04-02
  • Java中如何通过反射获取类的信息
    这篇文章主要为大家展示了Java中如何通过反射获取类的信息,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Java中如何通过反射获取类的信息”这篇文章吧。Java的特点有哪些Java的特点有哪些1....
    99+
    2023-06-06
  • C#中如何获取系统信息的Windows窗体
    这篇文章主要为大家展示了“C#中如何获取系统信息的Windows窗体”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中如何获取系统信息的Windows窗体”这篇文章吧。C#程序设计获取系统信息...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作