微服务架构
- 网关:路由用户请求到指定服务,转发前端 Cookie 中包含的 Session 信息;
- 用户服务:用户登录认证(Authentication),用户授权(Authority),用户管理(Redis Session Management)
- 其他服务:依赖 Redis 中用户信息进行接口请求验证
用户 - 角色 - 权限表结构设计
- 权限表
权限表最小粒度的控制单个功能,例如用户管理、资源管理,表结构示例:
id |
authority |
description |
---|---|---|
1 |
ROLEADMINUSER |
管理所有用户 |
2 |
ROLEADMINRESOURCE | 管理所有资源 |
3 |
ROLEA1 |
访问 ServiceA 的某接口的权限 |
4 |
ROLEA2 |
访问 ServiceA 的另一个接口的权限 |
5 |
ROLEB1 |
访问 ServiceB 的某接口的权限 |
6 |
ROLEB2 |
访问 ServiceB 的另一个接口的权限 |
- 角色 - 权限表
自定义角色,组合各种权限,例如超级管理员拥有所有权限,表结构示例:
id |
name |
authority_ids |
---|---|---|
1 |
超级管理员 | 1,2,3,4,5,6 |
2 |
管理员A |
3,4 |
3 |
管理员B |
5,6 |
4 |
普通用户 |
NULL |
- 用户 - 角色表
用户绑定一个或多个角色,即分配各种权限,示例表结构:
user_id | role_id |
---|---|
1 |
1 |
1 |
4 |
2 |
2 |
用户服务设计
Maven 依赖(所有服务)
<!-- Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- Spring Session Redis -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
应用配置 application.yml
示例:
# Spring Session 配置
spring.session.store-type=redis
server.servlet.session.persistent=true
server.servlet.session.timeout=7d
server.servlet.session.cookie.max-age=7d
# Redis 配置
spring.redis.host=<redis-host>
spring.redis.port=6379
# MySQL 配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://<mysql-host>:3306/test
spring.datasource.username=<username>
spring.datasource.password=<passowrd>
用户登录认证(authentication)与授权(authority)
Sl