Spring WebFlux + React搭建后台管理系统(10):配合Redis进行鉴权

本文介绍了如何在Spring WebFlux项目中结合Redis进行鉴权操作,包括启动时将API信息写入Redis,修改WebFilter进行鉴权判断,取消AuthenticationManager使用,并提供了测试与源码分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果是网关等服务,可以将路由及每个路由的权限缓存到redis数据库中,用户访问,在网关进行鉴权:

  • token比对redis缓存的token,不存在返回
  • token进行jwt解析,获取roles
  • 通过api的path和访问模式在redis数据库中获取该接口通行的roles
  • token中的roles和api对应的roles有相交说明有权限,否则返回
  • roles同时通过ReactiveSecurityContextHolder进行设置

1. 启动时api信息写入redis

  • 通过PostConstruct在启动时将数据库中的数据转存到redis中
  • key通过api_path_method的方式存储:String key = "api_" + api.getUrl().trim() + "_" + api.getRemark();
/**
 * @author: ffzs
 * @Date: 2020/9/1 下午12:52
 */

@Component
@AllArgsConstructor
@Slf4j
@Order(1)
public class prepareRedisData {
   
   

    private final ReactiveRedisTemplate<String, String> redisTemplate;
    private final SysApiService sysApiService;

    @PostConstruct
    public void route2Redis() {
   
   

        sysApiService.findAll()
                .flatMap(api -> {
   
   
                    String key = "api_" + api.getUrl().trim() + "_" + api.getRemark();
                    redisTemplate.delete(key);
                    if (!api.getRoles().isEmpty())
                        return redisTemplate.opsForSet()
                                .add(key, api.getRoles().toArray(new String[0]));
                    else return Mono.empty();
                })
                .subscribe();

        log.info("routes import to redis completed");
    }
}

2.修改WebFilter进行鉴权

  • 检查token是否存在

在这里插入图片描述

  • 检查token是否符合要求
  • 获取redis中的roles进行比对如果用户roles在redis中的数量大于等于1符合要求

在这里插入图片描述

  • 根据token获得Authentication

在这里插入图片描述

  • Authentication写入ReactiveSecurityContextHolder

在这里插入图片描述

2.1 完整代码如下


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值