该博客所有的文章都是自己的学习记录,方便后续复习,达到快速回顾知识点的作用。
本文章参考资料如下:
- 方志朋 - 《深入理解SpringCloud与微服务构建》
- SpringCloud官网
文章目录
- 需求描述
- 基础知识
- 个人理解
- 关键代码
- 源码解析
需求描述
企业会员系统(以下简称:EMS)采用微服务思路来搭建,所以会存在多个子系统的情况。每个子系统都涉及用户权限问题,每个子系统都实现一套权限明显不可能,所以需要实现统一登陆和统一权限控制。
通过查阅资料以及项目成员头脑风暴得出结论:使用Spring Clound Oauth2来实现。
基础知识
JWT
全称:Json Web Token.由三部分组成。分别是header(头信息),payload(有效载荷)以及Signature(签名)。
角色介绍
资源所有者
Owner:掌握资源信息的角色。
客户端
Client:系统客户端,例如手机浏览器。
授权服务
AuthorizationServer:提供授权服务。
资源服务
ResourceServer:提供资源服务。
个人理解
初步理解
如果按这种思路来实现,存在弊端:资源服务每次都需要验证Token是否有效。
优化方案
优点:避免每次都通过授权服务来验证Token的有效性;可以通过清除Redis上的Token,来达到清除用户登录信息效果。
关键代码
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
......
<dependencies>
.......
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
......
<!-- mysql的jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
</project>