news 2026/4/13 19:09:06

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; } }

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 22:02:40

信号处理仿真:图像信号处理_(18).图像处理仿真实验设计

图像处理仿真实验设计 在上一节中&#xff0c;我们已经了解了图像信号处理的基本概念和常用技术。本节将详细介绍如何设计图像处理仿真实验&#xff0c;包括实验的目标、步骤、工具选择以及具体的代码示例。通过本节的学习&#xff0c;读者将能够独立设计并实现图像处理仿真实…

作者头像 李华
网站建设 2026/4/3 6:39:22

信号处理仿真:信号处理基础_(3).模拟信号与数字信号转换

模拟信号与数字信号转换 在信号处理中&#xff0c;模拟信号与数字信号的转换是一个非常重要的步骤。模拟信号是连续变化的信号&#xff0c;而数字信号是由离散的数字值组成的信号。模拟信号与数字信号之间的转换主要涉及两个过程&#xff1a;模数转换&#xff08;Analog-to-Di…

作者头像 李华
网站建设 2026/4/13 12:40:08

(新卷,100分)- 提取字符串中的最长数学表达式(Java JS Python C)

(新卷,100分)- 提取字符串中的最长数学表达式&#xff08;Java & JS & Python & C&#xff09; 题目描述 提取字符串中的最长合法简单数学表达式&#xff0c;字符串长度最长的&#xff0c;并计算表达式的值。如果没有&#xff0c;则返回 0 。 简单数学表达式只能…

作者头像 李华
网站建设 2026/4/12 17:41:26

谷歌和苹果应用商店发现数十款AI去衣应用

据科技透明项目&#xff08;TTP&#xff09;周二发布的报告显示&#xff0c;在谷歌Play商店和苹果App Store上发现了数十款可以制作非合意性化深度伪造内容的AI应用&#xff0c;这一问题远不止存在于xAI的Grok中。仅限制Grok AI图像编辑器的访问可能还不足以阻止AI生成非合意性…

作者头像 李华
网站建设 2026/3/15 5:37:51

基于STM32单片机设计的智能坐垫_431

文章目录 一、前言 1.1 项目介绍 【1】项目开发背景 【2】设计实现的功能 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 国内外典型研究案例对比 国内研究现状 国外研究现状 关键技术发展趋势 【6】摘要 1.2 设计思路 1.3 系统功能总结 1.4 开发工具的选择 【1】设…

作者头像 李华
网站建设 2026/4/9 12:39:03

社会网络仿真软件:NetLogo_(9).可视化技术与应用

可视化技术与应用 在社会网络仿真中&#xff0c;可视化技术是至关重要的。它不仅能够帮助研究者更直观地理解仿真模型的运行过程和结果&#xff0c;还能使非专业用户更容易地解读和分析数据。NetLogo 提供了丰富的可视化工具和功能&#xff0c;使得开发者可以轻松地创建动态的…

作者头像 李华