千家信息网

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

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"SpringCloud Gateway中怎么配置fastjson序列化验证",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringCl
千家信息网最后更新 2025年11月07日SpringCloud Gateway中怎么配置fastjson序列化验证

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

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

    org.springframework.boot    spring-boot-starter-data-redis-reactive    com.alibaba    fastjson    ${fastjson.version}

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

我这里使用的是ReactiveRedisTemplate,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 reactiveRedisTemplate(LettuceConnectionFactory connectionFactory) {        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();        GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer();        RedisSerializationContext.SerializationPair keySerializationPair =             RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer);        RedisSerializationContext.SerializationPair valueSerializationPair =             RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer);        RedisSerializationContext.SerializationPair hashValueSerializationPair =             RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer);        RedisSerializationContext context = new RedisSerializationContext() {            @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 getStringSerializationPair() {                return keySerializationPair;            }        };        return new ReactiveRedisTemplate<>(connectionFactory, context);    }}

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

@Autowiredprivate ReactiveRedisTemplate reactiveRedisTemplate;

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

    org.springframework.cloud    spring-cloud-starter-gateway

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

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

@Componentpublic class TokenVerifyGatewayFilterFactory extends AbstractGatewayFilterFactory {    @Autowired    private ReactiveRedisTemplate 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> 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序列化验证"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

序列 配置 用户 缓存 对象 验证 类型 查询 有效 内容 方式 学习 合法 实用 更深 兴趣 字段 实用性 实际 控制台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东省公安厅网络安全监总队 马鞍山招网络技术员 h3c服务器黄灯一直闪是为什么 后台数据库 浙江企符号网络技术有限公司 软件开发公司的财务报表模板 网络技术基础与安全实训报告 世界网络安全大赛历届冠军 保证怎样网络安全 数据库中如何删除表中的行 新大话西游2 服务器 团风租房网络安全 宝塔服务器有哪些功能 永辉软件开发怎么样 数据库怎么装u盘里 软件开发人员简历模板 大兴区网络技术服务哪个好 服务器系统日志删除后可以恢复吗 arcgis地籍数据库建立流程 河南c语言软件开发价格表 数据库安全系数 飞书云文档显示服务器异常 定期组织开展网络安全检查检测 乡镇网络安全应急演练脚本 红尘网络技术论坛 公司做好网络安全的通知 软件开发可以开抖音小店吗 单位网络安全自查整改报告 大兴区网络技术服务哪个好 小程序上传图片到服务器
0