【SpringCloud】04-Gateway网关登录校验

1. 网关请求处理流程

在这里插入图片描述
在这里插入图片描述

2. 网关过滤器

在这里插入图片描述
在这里插入图片描述

3. 网关实现登录校验

@Component
// 参数构造器
@RequiredArgsConstructor
public class AuthGlobalFilter implements GlobalFilter, Ordered {private final AuthProperties authProperties;private final JwtTool jwtTool;private final AntPathMatcher antPathMatcher = new AntPathMatcher();@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取requestServerHttpRequest request = exchange.getRequest();// 2.判断是否需要做登录拦截if(isExclude(request.getPath().toString())) {// 放行return chain.filter(exchange);}// 3.获取tokenList<String> authorization = request.getHeaders().get("authorization");String token = null;if(!CollUtils.isEmpty(authorization)) {token = authorization.get(0);}// 4.校验并解析tokenLong userId = null;try {userId = jwtTool.parseToken(token);} catch (UnauthorizedException e) {// 无效,则拦截ServerHttpResponse response = exchange.getResponse();response.setRawStatusCode(401);// 直接拦截return response.setComplete();}// 5.传递信息,写在请求头中// System.out.println("userId: " + userId);String userInfo = userId.toString();ServerWebExchange swe = exchange.mutate().request(builder -> builder.header("user-info", userInfo)).build();// 6.放行return chain.filter(swe);}public boolean isExclude(String path) {for (String excludePath : authProperties.getExcludePaths()) {if (antPathMatcher.match(excludePath, path)) {return true;}}return false;}@Overridepublic int getOrder() {return 0;}
}

4. 服务拦截器

将微服务连接器写在common模块。

  1. 拦截器配置
public class UserInfoInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.获取 userIdString userId = request.getHeader("user-info");// 2.是否为空if (StrUtil.isNotBlank(userId)) {UserContext.setUser(Long.valueOf(userId));}return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {UserContext.removeUser();}
}
  1. 注册为Bean
    网关底层不是基于SpringMVC,注入SpringMVC会报错。给MvcConfig注入设置为具有SpringMVC的核心组件DispatcherServlet的类。
// 还要被扫描到
@Configuration
@ConditionalOnClass(DispatcherServlet.class)
public class MvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new UserInfoInterceptor());}
}
  1. common模块和微服务不在同一个包下,需要在resources/META-INF/spring.factories下添加文件的路径。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.hmall.common.config.MyBatisConfig,\com.hmall.common.config.MvcConfig,\com.hmall.common.config.JsonConfig

5. OpenFeign传递用户信息

在这里插入图片描述

微服务之间的相互调用不会经过网关,因此不会保存用户信息。
使用OpenFeign的拦截器。将用户信息写入请求头中。

public class DefaultFeignConfig {@Beanpublic Logger.Level feignLogLevel() {return Logger.Level.FULL;}@Beanpublic RequestInterceptor userInfoRequestInterceptor() {return new RequestInterceptor() {@Overridepublic void apply(RequestTemplate requestTemplate) {Long userId = UserContext.getUser();if (userId!=null) {requestTemplate.header("user-info", userId.toString());}}};}
}

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

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

相关文章

数据结构——笛卡尔树详解

数据结构——笛卡尔树 1&#xff0c;笛卡尔树的介绍2&#xff0c;笛卡尔树的构建3&#xff0c;笛卡尔树的代码实现 1&#xff0c;笛卡尔树的介绍 前面我们讲过《堆》和《二叉搜索树》&#xff0c;能不能把这两种数据结构的特性结合起来构造一棵新的树呢&#xff1f;当然是可以…

Qt-界面优化控件样式设置(72)

目录 描述 QPushButton 自定义复选框 输入框 列表框 菜单 实现登入界面 设置背景图 改变样式表 描述 这里介绍一些控件的样式设置 QPushButton 相关属性 font-size设置⽂字⼤⼩.border-radius设置圆⻆矩形. 数值设置的越⼤, ⻆就 "越圆".background-colo…

离散数学 第二讲 特殊集合和集合间关系 笔记 [电子科大]王丽杰

1.2 特殊集合与集合间关系 空集 不含任何元素的集合叫做空集(empty set)&#xff0c;记作∅. 空集可以符号化为 ∅ { x ∣ x ≠ x } ∅ \{ x|x ≠ x\} ∅{x∣xx} . 空集是绝对唯一的。 全集 针对一个具体范围&#xff0c;我们考虑的所有对象的集合叫做全集(universal se…

vulnhub-Kioptrix4靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 udf提权 四、结论 一、测试环境 1、系统环境 渗透机&#xff1a;kali2021.1(192.168.202.134) 靶 机&#xff1a;Linux 2.6.24 2、使用工具/软件 …

Oracle分布式数据库的安装遇到的问题【已解决】:找不到scott用户、出现【INS-30014】错误、oracle登录适配器错误

Oracle分布式数据库的安装遇到的问题【已解决】&#xff1a;找不到scott用户、出现【INS-30014】错误、oracle登录适配器错误 安装oracle19c软件利用Database Configuration Assistant&#xff0c;创建orcl数据库第一步&#xff1a;在开始菜单找到Oracle&#xff0c;点击“Data…

SpringColoud GateWay 核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Route路由&#xff1a; Gateway的基本构建模块&#xff0c;它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真&#xff0c;则匹配到该路由。 Route路由-动态路由实现原理&#xff1a; 配置变化Apollo 服务地址实例变化…

Axure使用echarts详细教程

本次使用的axure版本为rp9,下面是效果图。 接下来是详细步骤 【步骤1】在axure上拖一个矩形进来&#xff0c;命名为myChart(这个根据实际情况来,和后面的代码对应就好) 【步骤2】 点击交互->选择加载时->选择打开链接->链接外部地址 点击fx这个符号 【步骤3】在弹…

前端学习笔记(1.0)

在开发项目时&#xff0c;需要使用符号来代替书写./和../等麻烦的路径书写&#xff0c;所以就遇到了下面的问题。 输入没有路径提示 我们都知道&#xff0c;设置是通过配置vite等脚手架工具的配置文件&#xff0c;设置别名即可。 但是如果需要在使用的时候需要出现路径提示&…

虚拟滚动列表如何实现?

highlight: a11y-dark 虚拟滚动列表&#xff0c;虚拟滚动的关键在于只渲染当前视口内可见的数据项&#xff0c;而不是一次性渲染所有数据项。这可以显著提高性能&#xff0c;尤其是在处理大量数据时。 以下是一个完整的虚拟滚动列表的示例代码&#xff1a; <!DOCTYPE htm…

React高级Hook

useReducer useReducer 是 React 提供的一个 Hook&#xff0c;用于在函数组件中使用 reducer 函数来管理组件的 state。它类似于 Redux 中的 reducer&#xff0c;但仅用于组件内部的状态管理。useReducer 可以使复杂的状态逻辑更加清晰和可维护。 基本用法 useReducer 接收…

1.前提配置 关防火墙 关selinux

1.前提配置 关防火墙 关selinux 2.安装web服务程序nginx 未安装则需重新设置挂载点 若已安装&#xff0c;则查看系统中是否存在 3.当前主机添加多地址&#xff08;ip a&#xff09; 配置了三个IP地址 查看IP地址是否配置成功 4.自定义nginx配置文件通过多地址区分多网站 /…

使用JMeter进行Spring Boot接口的压力测试

使用 Apache JMeter 对接口进行压力测试是一个相对简单的过程。以下是详细的步骤&#xff0c;包括安装、配置和执行测试计划。 1. 下载和安装 JMeter 下载 JMeter 从 JMeter 官方网站https://jmeter.apache.org/download_jmeter.cgi 下载最新版本的 JMeter。 解压缩 将下载的 …

02.数据结构介绍顺序表、链表简述+对比

目录 一、什么是数据结构 二、线性表 三、顺序表 四、链表 五、顺序表和链表的区别 一、什么是数据结构 数据结构是由“数据”和“结构”两个词组合而来。 数据&#xff1a;常见的数值1、2、3......&#xff0c;网页里的文字图片信息等都是数据。 结构&#xff1a;组织数据…

【从零开始的LeetCode-算法】3184. 构成整天的下标对数目 I

给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如&#xff0c;1 天是 24 小时&#xff0c…

leetcode动态规划(九)-0-1背包理论基础

题目 背包问题主要有以下几种分类&#xff0c;对于面试来说掌握0-1背包和完全背包足够&#xff0c;多重背包和分组背包是竞赛级别的题目&#xff0c;面试就无需准备 题目&#xff1a; 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价…

C# SM2 加签、验签工具

目录 效果 项目 代码 下载 效果 项目 代码 using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Crypto.Signers; using Org.BouncyCastle.Asn1.GM; using System; using System.Text; using System.Windows.Forms; using Org.BouncyCastle.Asn1.X9; using…

element plus e-table表格中使用多选,当翻页时已选中的数据丢失

摘要&#xff1a; 点击第一页选中两个&#xff0c;再选择第二页&#xff0c;选中&#xff0c;回到第一页&#xff0c;之前选中的要保留&#xff01; element ui table 解决办法&#xff1a; :row-key“getRowKeys” &#xff08;写在el-table中&#xff09; methods中声明 ge…

Spring Boot项目中怎么设置内容安全策略Content Security Policy

内容安全策略&#xff08;CSP&#xff0c;Content Security Policy&#xff09; 是一种用于防止跨站点脚本攻击&#xff08;XSS&#xff09;和数据注入攻击的安全策略。它通过指定允许加载的资源类型&#xff08;如脚本、样式表、图像等&#xff09;和其来源&#xff0c;来减少…

Python爬虫之小白入门保姆级教程,带7个爬虫小案例(附源码)!

以下是一份 Python 爬虫入门保姆级教程&#xff1a; 一、准备工作 安装 Python 前往 Python 官方网站&#xff08;https://www.python.org/&#xff09;下载适合你操作系统的 Python 版本并安装。安装过程中可以勾选“Add Python to PATH”以便在命令行中方便地调用 Python。 …

初识git · 有关模型

目录 前言&#xff1a; 有关开发模型 前言&#xff1a; 其实文章更新到这里的时候&#xff0c;我们已经学习了可以满足我们日常生活中的基本需求的指令了&#xff0c;但是为什么要更新本篇文章呢&#xff1f;是因为实际生活中我们对于开发工作&#xff0c;运维工作&#xff…