千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"SpringCloud Gateway中怎么配置fastjson序列化验证",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringCl
千家信息网最后更新 2026年11月01日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安全错误 数据库的锁怎样保障安全 互联网黑科技 互联网科技产业 互联网最新的科技 互联网巨头反垄断金融科技 高科技与互联网 互联网与新科技 杭州互联网科技公司 金融科技和互联网金融 华中科技有哪些互联网大佬 济南和联互联网科技有限公司 中盈科技互联网信息有限公司 创业天下互联网科技有限公司 以后互联网后是啥科技 成都铂石互联网科技做什么的 中国互联网十大科技股排名 互联网科技公司营业执照怎么办理 工业互联网展湾科技股份有限公司 科技互联网海报 广东工业互联网大赛深圳学泰科技 青岛互联网科技园 百单网互联网科技有限公司怎么样 金融科技和互联网金融 互联网科技股午盘股票涨跌 中正互联网科技招聘 互联网科技有哪些公司 注册互联网科技公司经营范围大全 卓翼科技产业互联网合作 徐州市互联网科技有限公司 梅州GM互联网络科技有限公司 宁波允成互联网科技有限公司
0