(六)Gateway开发教程之实现统一授权【集成JWT】

简介: 本篇文章就是告诉大家如何在SpringCloud项目中使用JWT实现统一授权。Gateway中集成统一认证授权,是微服务网关中必然要集成的功能之一,重要性不言而喻.

前情回顾


上篇文章,我们讲到了为什么要选择JWT来实现统一认证授权,其优点更符合初期项目的形成,同样可以通过双token来增强用户的体验度种种,而这些纸上谈兵式的谈论过去,迎来的就是如何去实现这些。


本篇文章就是告诉大家如何在SpringCloud项目中使用JWT实现统一授权。


使用JWT来加密解密


在集成到SpringCloud项目中之前,我们要先做一些JWT技术的调研,但是要调研到什么程度才能做到集成的基本要素呢?


如果你问我,我会告诉你,最起码也要将JWT的token加密、解密弄清楚,或者是调试成功,才能去进行集成至SpringCloud中。


准备工作

首先我们要先提供一个密钥,通过此密钥来进行加解密。

JWT加密

直接贴代码:

String key = Base64.getEncoder().encodeToString("zhegekeysuibianshejijiuxingkannixinqing".getBytes(Charsets.UTF_8));
//用户信息
Map<String,String> map = new HashMap<>();
map.put("userId","zhangsan");
//加密
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte[] apiKeySecretBytes = Base64.getDecoder().decode(key);
Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
JwtBuilder builder = Jwts.builder().signWith(signingKey);
map.forEach(builder::claim);
//输出token
System.out.println(builder.compact());

根据上述代码,我们会生成如下图的一大串token。


b246e8370a2ef7e03a99ec69dd489e6.png


JWT解密


解密的话,其实就是将token解析出相应的用户信息。

Claims claims = Jwts.parserBuilder().setSigningKey(Base64.getDecoder().decode(JwtUtil.key)).build()
      .parseClaimsJws(token).getBody();
System.out.println(claims.get("userId"));

可以得到下图:


12f93bc6a439f65206ebb5c3e35faa9.png


将JWT集成到Gateway中


登录认证

我们在Controller层书写一个LoginController.java类,在其中书写一个获取token的api接口。

@RestController
public class LoginController {
    @PostMapping("/token")
    public R<AuthInfo> token(@RequestParam(required = false) String account,
                                      @RequestParam(required = false) String password) {
        Map<String,String> map = new HashMap<>(16);
        map.put("account", account);
        map.put("password", password);
        String token = JwtUtil.createJwt(map);
        if (userInfo == null || userInfo.getUser() == null || userInfo.getUser().getId() == null) {
            return R.fail();
        }
        return R.success(token);
    }
}

编写过滤器验证token


既然搞定了登录获取token的api接口,我们就要将所有访问的URL链接进行过滤器中进行过滤。

所以接下来我们来书写一个认证过滤器。

public class AuthFilter implements GlobalFilter, Ordered {
   @Override
   public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
      String path = exchange.getRequest().getURI().getPath();
      ServerHttpResponse resp = exchange.getResponse();
      String headerToken = exchange.getRequest().getHeaders().getFirst("auth");
      if (StringUtils.isBlank(headerToken)) {
         return unAuth(resp, "缺失令牌,鉴权失败");
      }
      Claims claims = JwtUtil.parseJWT(headerToken);
      if (claims == null) {
         return unAuth(resp, "请求未授权");
      }
      return chain.filter(exchange);
   }
   @Override
   public int getOrder() {
      return -99;
   }
}

总结


Gateway中集成统一认证授权,是微服务网关中必然要集成的功能之一,重要性不言而喻,希望大家可以有所重视。

目录
相关文章
|
5月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
2533 123
|
7月前
|
数据采集 运维 DataWorks
DataWorks 千万级任务调度与全链路集成开发治理赋能智能驾驶技术突破
智能驾驶数据预处理面临数据孤岛、任务爆炸与开发运维一体化三大挑战。DataWorks提供一站式的解决方案,支持千万级任务调度、多源数据集成及全链路数据开发,助力智能驾驶模型数据处理与模型训练高效落地。
|
10月前
|
监控 Java API
1K star!这个开源项目让短信集成简单到离谱,开发效率直接翻倍!
SMS4J 是一款由国内技术团队打造的短信聚合框架,专为解决多短信服务商接入难题而生。它就像短信界的"瑞士军刀",目前已整合21家主流短信服务商,从阿里云、腾讯云到中国移动云MAS,开发者只需通过简单配置即可实现多平台无缝切换。
692 4
|
9月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
621 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
8月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
1670 0
|
10月前
|
人工智能 程序员 测试技术
通义灵码与魔搭 Notebook 深度集成:在线编码开箱即用,开发效率倍增
通义灵码 2.0 AI 程序员 2025 年 1 月正式上线,目前已经服务百万开发者,成为国内开发者最受欢迎的智能编码助手。
|
10月前
|
缓存 前端开发 API
(网页系统集成CAD功能)在线CAD中配置属性的使用教程
本文介绍了Mxcad SDK在线预览和编辑CAD图纸的功能及配置方法。通过Vite、CDN或Webpack实现集成,用户可自定义设置以满足项目需求。主要内容包括:1)`createMxCad()`方法的初始属性配置,如画布ID、WASM文件路径、字体加载路径等;2)`MxFun.setIniset()`方法提供的更多CAD初始配置;3)`McObject`对象API用于动态调整视图背景色、浏览模式等。此外,还提供了在线Demo(https://demo2.mxdraw3d.com:3000/mxcad/)供用户测试实时效果。
|
10月前
|
人工智能 IDE 测试技术
通义灵码与魔搭Notebook深度集成:在线编码开箱即用,开发效率倍增
通义灵码2.0 AI程序员于2025年1月上线,目前已支持超过百万开发者。该工具的智能编程能力现已与阿里云AI模型开发平台魔搭ModelScope实现技术集成
429 0
|
5月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
4月前
|
缓存 JSON NoSQL
别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码
小富分享Spring Cloud Gateway内置30+过滤器,涵盖请求、响应、路径、安全等场景,无需重复造轮子。通过配置实现Header处理、限流、重试、熔断等功能,提升网关开发效率,避免代码冗余。
526 1