springcloud alibaba gateway网关鉴权

news/发布时间2024/5/12 9:28:11

登录鉴权:在gateway网关中实现全局过滤器GlobalFilter以及拦截器的顺序Ordered,在nacos中配置好需要放行的路径(如登录/login),获取请求头中的用户id,组装reids的key,来redis中存放的value,即token,再获取请求头中的token来跟redis中的value值进行比对,一致则放行,否则抛出异常。
核心代码如下:

点击查看代码
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();URI uri = request.getURI();String url = uri.getPath();log.info("请求url:{}", url);if (this.urlIsWhiteList(url)) {return chain.filter(exchange);}String token = exchange.getRequest().getHeaders().getFirst(HttpHeaders.AUTHORIZATION);String userId = exchange.getRequest().getHeaders().getFirst(RedisConstant.HEADER_USERID);if (StrUtil.isEmpty(token) || StrUtil.isEmpty(userId)) {log.error("请求参数未检索到token和用户Id,授权不予通过,当前登录Id={}", userId);throw new BizException("未检索到token和用户Id,授权不予通过");}String tokenValue = redisTemplate.opsForValue().get(RedisConstant.AUTH_TOKEN_PREFIX + userId);if (!(StrUtil.equals(token, tokenValue))) {log.error("token与缓存不匹配,授权不予通过,当前登录Id={}", userId);throw new BizException("token与缓存不匹配,授权不予通过");}//获取用户ip存放到redis里getUserIpSetRedis(request, userId);//调用chain.filter继续向下游执行return chain.filter(exchange);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/06166767.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Ubuntu部署有道QAnything(中间涉及到更换mysql容器端口)

系统配置版本:Ubuntu 20.04 有两块3090的显卡 下载相关文件首先下载源码,下载完成后解压得到QAnything-master文件夹 github下载地址:https://github.com/netease-youdao/qanything gitee下载地址:https://gitee.com/netease-youdao/QAnything?_from=gitee_search 下载emb…

03-支付服务

1. 交易流程 下面我们来看下基础服务组件中的交易模块,我们已完成结算功能,如图所示,在结算这个模块中我们都会进入到一个子流程【交易流程】:对于交易,大家应该都知道,就是买东西付款,卖东西收款,在任何一个盈利的系统中,都离不开交易模块,下图是一个扫码支付的粗略…

读天才与算法:人脑与AI的数学思维笔记03_AlphaGo

读天才与算法:人脑与AI的数学思维笔记03_AlphaGo1. 国际象棋 1.1. 1997年计算机“深蓝”(Deep Blue)击败了顶尖国际象棋手,但机器取代数学研究机构还言之尚早 1.2. 下国际象棋与数学的形式化证明颇有相似之处,但学者认为中国围棋的思维方式更能够体现数学家思考的创造性和…

框架图与动机结构化与可重定目标代码生成

框架图与动机结构化与可重定目标代码生成 用于数值计算的代码生成方法传统上侧重于优化循环嵌套的性能。相关分析侧重于标量元素,因为循环嵌套的主体通常计算单个元素。这样的分析必须考虑内存依赖性与混叠。这些方法在过去进行了深入研究,并已达到高度成熟。当从像C或Fortra…

MVCC

多版本并发控制,多个事物并发的情况下到底该访问哪个版本你解释一下MVCC?mvcc的意思是多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突, 它的底层实现主要是依赖了数据库中的三个部分,隐藏字段,undo log日志和readView读视图 隐藏字段是指:在mysql中给每…