iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >SpringCloud Gateway中怎么配置fastjson序列化验证
  • 529
分享到

SpringCloud Gateway中怎么配置fastjson序列化验证

2023-06-05 02:06:43 529人浏览 泡泡鱼
摘要

本篇内容主要讲解“SpringCloud Gateway中怎么配置fastJSON序列化验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springCloud Gateway中怎么配置fast

本篇内容主要讲解“SpringCloud Gateway中怎么配置fastJSON序列化验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习springCloud Gateway中怎么配置fastjson序列化验证”吧!

一、ReactiveRedisTemplate使用fastjson进行序列化配置

首先在maven中引入reactive redis包和fastjson包

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-Redis-reactive</artifactId></dependency><dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>${fastjson.version}</version></dependency>

编写RedisAutoConfig.class进行自定义ReactiveRedisTemplate Bean配置

我这里使用的是ReactiveRedisTemplate<String, Object>,key为String类型,value为Object类型,这样value可以直接使用Java对象操作,不需要显示进行fastjson的序列化和反序列化。

需要注意的是new ReactiveRedisTemplate时需要传入1个RedisSerializationContext对象,redis的key、value序列化方式就配置在RedisSerializationContext中。

这里我们使用StringRedisSerializer进行key和hashKey的序列化,使用fastjson的GenericFastJsonRedisSerializer进行value和hashValue的序列化。

@Configurationpublic class RedisAutoConfig {    @Bean    public ReactiveRedisTemplate<String, Object> reactiveRedisTemplate(LettuceConnectionFactory connectionFactory) {        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();        GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer();        RedisSerializationContext.SerializationPair<String> keySerializationPair =             RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer);        RedisSerializationContext.SerializationPair<Object> valueSerializationPair =             RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer);        RedisSerializationContext.SerializationPair<Object> hashValueSerializationPair =             RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer);        RedisSerializationContext<String, Object> context = new RedisSerializationContext<String, Object>() {            @Override            public SerializationPair geTKEySerializationPair() {                return keySerializationPair;            }            @Override            public SerializationPair getValueSerializationPair() {                return valueSerializationPair;            }            @Override            public SerializationPair getHashKeySerializationPair() {                return keySerializationPair;            }            @Override            public SerializationPair getHashValueSerializationPair() {                return hashValueSerializationPair;            }            @Override            public SerializationPair<String> getStringSerializationPair() {                return keySerializationPair;            }        };        return new ReactiveRedisTemplate<>(connectionFactory, context);    }}

这样配置完成后,就可以直接自动注入ReactiveRedisTemplate<String, Object>对象

@Autowiredprivate ReactiveRedisTemplate<String, Object> reactiveRedisTemplate;

二、在SprinGCloudGateway中使用ReactiveRedisTemplate进行自定义token校验

首先在maven中引入spring cloud gateway依赖

<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-gateway</artifactId></dependency>

编写自定义filter factory TokenVerifyGatewayFilterFactory进行自定义token校验

首先从request的header中取出token字段,根据token查询redis,取出token对应的用户id,如果用户id存在则token有效,如果不存在则返回token无效。

@Componentpublic class TokenVerifyGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {    @Autowired    private ReactiveRedisTemplate<String, Object> reactiveRedisTemplate;    @Override    public GatewayFilter apply(Object config) {        return (exchange, chain) -> {            ServerHttpRequest request = exchange.getRequest();            String token = request.getHeaders().get("token").get(0);            return this.getUserId(token).flatMap(op -> {                //1、判断redis中是否存在对应缓存,不存在则直接返回token无效                if (!op.isPresent()) {                    ServerHttpResponse response = exchange.getResponse();                    byte[] bits = "token无效".getBytes(StandardCharsets.UTF_8);                    DataBuffer buffer = response.bufferFactory().wrap(bits);                    response.setStatusCode(httpstatus.UNAUTHORIZED);                    response.getHeaders().add("Content-Type", "text/plain;charset=UTF-8");                    return response.writeWith(Mono.just(buffer));                }                //2、缓存有效,获取userId,进行日志记录或者其他操作                System.out.println("redis缓存token用户:" + op.get());                //3、token鉴权通过,继续执行filter完成转发                return chain.filter(exchange);            });        };    }    private Mono<Optional<String>> getUserId(String token) {        //a、以reactive的方式查询redis,获取token对应value值        return this.reactiveRedisTemplate.opsForValue().get(token)                //b、对redis返回结果进行Optional封装,这里v为String类型的用户id                .map(v -> Optional.ofNullable((String)v))                //c、如果token无效,b不会执行,在这里返回1个值为null的Optional对象                .switchIfEmpty(Mono.just(Optional.ofNullable(null)));    }}

三、测试

编写SpringCloudGateway配置文件

对于任意uri,都使用TokenVerifyGatewayFilterFactory进行请求过滤,并将localhost:8080的任意请求转发至https://www.baidu.com。

spring:  cloud:    gateway:      routes:        - id: testRoute          uri: https://www.baidu.com          predicates:            - Path=/**          filters:            - TokenVerify

Redis缓存数据设置

在Redis中缓存key=”GoodToken”,value=”magicTan”,即goodToken是合法token,用户id为magicTan。如果使用不合法token如invalidToken就无法取到用户id。

运行项目进行测试

调用localhost:8080,header中设置token为goodToken,可以看到请求转发至百度,并且控制台输出了缓存的用户id 

到此,相信大家对“SpringCloud Gateway中怎么配置fastjson序列化验证”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: SpringCloud Gateway中怎么配置fastjson序列化验证

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringCloud Gateway中怎么配置fastjson序列化验证
    本篇内容主要讲解“SpringCloud Gateway中怎么配置fastjson序列化验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringCloud Gateway中怎么配置fast...
    99+
    2023-06-05
  • SpringCloud GateWay网关怎么配置
    本文小编为大家详细介绍“SpringCloud GateWay网关怎么配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud GateWay网关怎么配置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-30
  • SpringCloud之SpringCloud gateway网关路由怎么配置
    本篇内容介绍了“SpringCloud之SpringCloud gateway网关路由怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2023-07-05
  • SpringCloud Gateway动态路由怎么配置
    这篇“SpringCloud Gateway动态路由怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spri...
    99+
    2023-07-05
  • fastjson反序列化漏洞怎么解决
    要解决fastjson反序列化漏洞,可以采取以下几种措施:1. 更新fastjson版本:及时更新fastjson到最新版本,因为漏...
    99+
    2023-08-14
    fastjson
  • 使用fastjson怎么实现反序列化
    这期内容当中小编将会给大家带来有关使用fastjson怎么实现反序列化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、fastjson反序列化就是把JSON格式的文本转化为Java Bean对象。fas...
    99+
    2023-06-14
  • Redis中RedisTemplate怎么配置序列和反序列化
    这篇文章主要介绍“Redis中RedisTemplate怎么配置序列和反序列化”,在日常操作中,相信很多人在Redis中RedisTemplate怎么配置序列和反序列化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-29
  • Spring框架中Redis序列化怎么配置
    在Spring框架中配置Redis序列化需要配置RedisTemplate的序列化器。以下是一个简单的配置示例: @Configur...
    99+
    2024-04-29
    Redis Spring
  • 东八区springboot怎么配置序列化
    今天小编给大家分享一下东八区springboot怎么配置序列化的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用Spring...
    99+
    2023-07-05
  • nginx怎么配置ssl双向验证
    要配置SSL双向验证,您需要执行以下步骤:1. 生成SSL证书和密钥对:- 使用openssl生成一个自签名的根证书和密钥对,这将用...
    99+
    2023-09-02
    nginx ssl
  • hadoop怎么配置密钥验证登录
    在Hadoop中,可以通过配置SSH密钥来实现用户的验证登录。以下是配置步骤: 生成密钥对:在要使用的用户的主机上运行以下命令生成...
    99+
    2024-03-02
    hadoop
  • Python中怎么实现序列化与反序列化
    这篇文章给大家介绍Python中怎么实现序列化与反序列化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python序列化与反序列在程序运行的过程中,所有的变量都是在内存中,比如,定义一个 dict:d =&n...
    99+
    2023-06-15
  • 怎么在python中使用序列化与反序列化
    这篇文章将为大家详细讲解有关怎么在python中使用序列化与反序列化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.requesuts;2.s...
    99+
    2023-06-14
  • JavaScript中怎么用JSON来序列化与反序列化
    小编给大家分享一下JavaScript中怎么用JSON来序列化与反序列化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用JSON...
    99+
    2024-04-02
  • 怎么实现SpringCloud-Alibaba-Sentinel-配置持久化策略
    今天就跟大家聊聊有关怎么实现SpringCloud-Alibaba-Sentinel-配置持久化策略,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言:Sentinel的如果没有配置...
    99+
    2023-06-15
  • 怎么验证jdk环境变量配置成功
    可以通过以下步骤验证JDK环境变量配置是否成功:1. 打开命令提示符(Command Prompt)或终端(Terminal)窗口。...
    99+
    2023-08-31
    jdk
  • Golang中Json的序列化和反序列化怎么使用
    这篇文章主要介绍“Golang中Json的序列化和反序列化怎么使用”,在日常操作中,相信很多人在Golang中Json的序列化和反序列化怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang中Js...
    99+
    2023-06-30
  • 怎么在SpringCloud中将Zookeeper作为配置中心
    本篇文章给大家分享的是有关怎么在SpringCloud中将Zookeeper作为配置中心,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。相关依赖<xml vers...
    99+
    2023-06-14
  • Java中怎么实现对象的序列化和反序列化
    这篇文章给大家分享的是有关Java中怎么实现对象的序列化和反序列化的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。引言:序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在...
    99+
    2024-04-02
  • 怎么在python中序列化JSON
    今天就跟大家聊聊有关怎么在python中序列化JSON,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作