当前位置: 首页 > news >正文

Day02-12.开发接口功能-分析登录用户传递流程13:16

套路,脚手架,看一眼就行了,没啥技术含量

package com.tianji.gateway.filter; import com.tianji.authsdk.gateway.util.AuthUtil; import com.tianji.common.domain.R; import com.tianji.common.domain.dto.LoginUserDTO; import com.tianji.gateway.config.AuthProperties; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.util.AntPathMatcher; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; import java.util.List; import static com.tianji.auth.common.constants.JwtConstants.AUTHORIZATION_HEADER; import static com.tianji.auth.common.constants.JwtConstants.USER_HEADER; @Component public class AccountAuthFilter implements GlobalFilter, Ordered { private final AuthUtil authUtil; private final AuthProperties authProperties; private final AntPathMatcher antPathMatcher = new AntPathMatcher(); public AccountAuthFilter(AuthUtil authUtil, AuthProperties authProperties) { this.authUtil = authUtil; this.authProperties = authProperties; } @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 1.获取请求request信息 ServerHttpRequest request = exchange.getRequest(); String method = request.getMethodValue(); String path = request.getPath().toString(); String antPath = method + ":" + path; // 2.判断是否是无需登录的路径 if(isExcludePath(antPath)){ // 直接放行 return chain.filter(exchange); } // 3.尝试获取用户信息 List<String> authHeaders = exchange.getRequest().getHeaders().get(AUTHORIZATION_HEADER); String token = authHeaders == null ? "" : authHeaders.get(0); R<LoginUserDTO> r = authUtil.parseToken(token); // 4.如果用户是登录状态,尝试更新请求头,传递用户信息 if(r.success()){ exchange.mutate() .request(builder -> builder.header(USER_HEADER, r.getData().getUserId().toString())) .build(); } // 5.校验权限 authUtil.checkAuth(antPath, r); // 6.放行 return chain.filter(exchange); } private boolean isExcludePath(String antPath) { for (String pathPattern : authProperties.getExcludePath()) { if(antPathMatcher.match(pathPattern, antPath)){ return true; } } return false; } @Override public int getOrder() { return 1000; } }

http://www.jsqmd.com/news/314050/

相关文章:

  • AI大模型:python汽车大数据分析可视化系统 机器学习 协同过滤推荐算法 二手车推荐系统 汽车推荐系统 爬虫技术
  • 视频编解码与 GOP 结构详解
  • Python全栈项目--基于机器学习的垃圾邮件过滤系统
  • 高新技术产品认证核心指南
  • AI大模型机器学习:Python汽车推荐系统 数据分析 可视化 协同过滤推荐算法 汽车租赁 Django框架 大数据 新能源汽车 毕业设计
  • 【爆肝】传统RAG已凉?图数据库让大模型准确率飙升95%,小白也能秒变AI大神!
  • 程序员必看!AI大模型算力暗战:腾讯阿里字节跳动背后的8家技术支撑企业,让你的AI开发不再缺算力!
  • 炸裂!国产Kimi K2.5多模态大模型开源,代码生成、界面设计一键搞定,小白程序员也能秒变大神!
  • 基于Python的智能房价分析与预测系统(源码+lw+部署文档+讲解等)
  • 基于Python爬虫的网络小说热度分析(源码+lw+部署文档+讲解等)
  • 一阶IIR低通滤波器:从原理到嵌入式实战
  • 布谷鸟科技携AI边缘计算产品线亮相韩国ROSCon KOREA 2026
  • (新卷,100分)- 5键键盘(Java JS Python)
  • (新卷,100分)- 单词接龙(Java JS Python)
  • 吐血推荐研究生必用的10款AI论文工具
  • 宇树机器狗GO2在gazebo驱动仿真
  • 亲测好用10个AI论文网站,助你轻松搞定本科毕业论文!
  • gazebo仿真环境启动velodyne雷达
  • 信号处理仿真:信号处理基础_(3).模拟信号与数字信号转换
  • Thinkphp和Laravel学生宿舍管理系统功能多 echart统计可视化120wq-_
  • 今日,DeepSeek再次“拆掉重做”,开源架构炸场:OCR 2只是起点,这次要重构AI的“眼睛”和“大脑”?
  • 影悦电影推荐系统
  • 基于STM32单片机设计的智能坐垫_431
  • 68344
  • AI大模型数据治理 = 治理过程*AI增强:感知智能化、决策智能化、执行智能化、优化智能化
  • 谷歌和苹果应用商店发现数十款AI去衣应用
  • 冬季风暴考验因AI数据中心而紧张的电网系统
  • 网站建设完整指南:从零开始到跨平台部署
  • 单例模式 懒汉式(双重检查锁)
  • 用Ticker API写一个行情面板:一次完整的实现过程