本篇内容主要讲解“怎么使用Spring Cloud的Zuul网关和JWT身份验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Spring Cloud的Zuul网关和JWT身份验证”吧!
Zuul,是spring cloud 全家桶中的网关
网关:程序统一入口。主要功能:服务分发(动态路由),服务鉴权 等。
需求
//已有访问路径 http://localhost:8080/user //通过网关希望访问路径 http://localhost:10010/userservice/user
步骤0:创建 zuul_demo
步骤一:修改pom文件,添加 zuul 、测试 依赖
步骤二:创建启动类,添加 开启网关代理 注解 @EnableZuulProxy
步骤三:创建yml文件,配置端口、服务名、对应关系(访问路径 / 服务地址)
步骤0:创建 zuul_demo
步骤一:修改pom文件,添加 zuul 、测试 依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies>
步骤二:创建启动类,添加 开启网关代理 注解 @EnableZuulProxy
package com.czxy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy //开启网关代理 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
步骤三:创建yml文件,配置端口、服务名、对应关系(访问路径 / 服务地址)
server: port: 10010 spring: application: name: zuuldemo2 #网关配置:访问路径 和 服务路径 对应关系 zuul: routes: userservice: path: /userservice/** #访问路径 url: http://localhost:8080 #服务路径
步骤一:搭建eureka客户端(pom依赖、启动类注解、yml注册地址)
pom依赖
<!--添加eureka客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
启动类
package com.czxy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy //开启网关代理 @EnableEurekaClient //开启eureka客服端 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
yml文件
#注册地址 eureka: client: service-url: defaultZone: http://localhost:10086/eureka
步骤二:yml文件对应关系 (访问路径 和 服务名)
#网关配置:访问路径 和 服务路径 对应关系 zuul: routes: userservice: path: /userservice/** #访问路径 #url: http://localhost:8080 #服务路径 serviceId: userservice #服务名称时
路由名称 和 服务名 通常采用一样的命名,zuul允许简化
zuul: routes: userservice: /userservice/**
默认情况下,一切服务的映射路径就是服务名本身。
##默认配置 zuul: routes: adminservice: /adminservice/**
步骤0:创建项目 zuul_demo
步骤一:修改pom文件,添加 zuul依赖、eureka 客户端依赖
<dependencies> <!--网关依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!--添加eureka客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies>
步骤二:创建启动类,添加2添加 开启网关代理、开启eureka客户端
开启网关代理 @EnableZuulProxy
开启eureka客户端 @EnableEurekaClient
package com.czxy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy //开启网关代理 @EnableEurekaClient //开启eureka客服端 public class Zuul2Application { public static void main(String[] args) { SpringApplication.run(Zuul2Application.class,args); } }
步骤三:创建yml文件,配置端口号、服务名、注册地址
server: port: 10010 spring: application: name: zuuldemo2 #注册地址 eureka: client: service-url: defaultZone: http://localhost:10086/eureka
路由前缀:用于维护 版本号 或 项目名
修改yml文件,进行配置
zuul: prefix: /api
访问
编写过滤器,继承父类:ZuulFilter
常见方法:
filterType() 过滤器类型,取值:"pre"
filterOrder() 过滤器顺序,取值:1
shouldFilter() 是否执行,取值:true
run() 执行业务逻辑
只要将过滤器的实现,添加到spring容器中,zuul将自动启用过滤器。
过滤器父类:ZuulFilter
工具类(请求上下文对象):RequestContext
特殊请求头:Authorization(下图是postman软件)
package com.czxy.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; @Component public class LoginFilter extends ZuulFilter { @Override public String filterType() { return "pre"; //1 过滤器类型 } @Override public int filterOrder() { return 1; //2 过滤器排序 } @Override public boolean shouldFilter() { return true; //3 是否执行 } @Override public Object run() throws ZuulException { // 获得一个特殊请求头,判断是否有值:有 返回 null(放行) , 没有 响应状态码401 //1 获得工具类(请求上下文对象) RequestContext requestContext = RequestContext.getCurrentContext(); //2 通过工具类获得request对象 HttpServletRequest request = requestContext.getRequest(); //3 通过request对象获得特殊请求头 String auth = request.getHeader("authorization"); //4 判断 if(auth == null){ //没有 requestContext.setSendZuulResponse(false); //关闭响应 requestContext.setResponseStatusCode(401); } //放行 return null; } }
eureka :注册中心
服务端:提供注册
客户端:进行注册
ribbon:负载均衡(集群)
Hystrix:熔断器,执行备选方案
Feign:远程调用
Zuul:网关,统一入口。
服务与服务之间共享数据,采用JWT先生成数据,在另一个服务中解析数据,为了保证数据安全性,使用RAS对数据进行加密。
RAS 非对称加密算法
同时生产一对秘钥:公钥和私钥。
公钥秘钥:用于加密
私钥秘钥:用于解密
特点
编写测试类使用工具生成公钥,私钥
//生成公钥和私钥 RasUtils.generateKey(公钥位置,私钥位置,密码); RasUtils.generateKey(pubKeyPath,priKeyPath,"234"); //获得公钥 RasUtils.getPublicKey(pubKeyPath); //获得私钥 RasUtils.getPrivateKey(priKeyPath);
JWT 基于JSON的认证规范。(Json Web Token)
使用JWT目的:生成数据、解析数据
使用JWT
步骤一:添加依赖(含之前的)
<properties> <jwt.jjwt.version>0.9.0</jwt.jjwt.version> <jwt.joda.version>2.9.7</jwt.joda.version> <lombok.version>1.16.20</lombok.version> <beanutils.version>1.9.3</beanutils.version> </properties> <dependencies> <!--网关依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!--添加eureka客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--jwt依赖--> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>${beanutils.version}</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jwt.jjwt.version}</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>${jwt.joda.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> </dependencies>
步骤二:导入工具
步骤三:使用
//生成数据, UserInfo --> String(加密) //JwtUtils.generateToken(数据,过期时间(分钟), 私钥) String token = JwtUtils.generateToken(userInfo,30, RasUtils.getPrivateKey(priKeyPath)); //解析数据, String(加密) --> UserInfo // JwtUtils.getObjectFromToken(加密数据, 公钥, 封装对象.class); UserInfo userInfo = JwtUtils.getObjectFromToken(token, RasUtils.getPublicKey(pubKeyPath), UserInfo.class);
到此,相信大家对“怎么使用Spring Cloud的Zuul网关和JWT身份验证”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。