# auth-spring-cloud
**Repository Path**: dihuange/auth-spring-cloud
## Basic Information
- **Project Name**: auth-spring-cloud
- **Description**: 微服务中网关 认证,权限,黑白名单 校验方案,纯内存操作,性能无损耗
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2022-07-14
- **Last Updated**: 2022-07-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# auth-spring-cloud
#### 项目介绍
在单体应用架构下,很喜欢shiro的那种写法,譬如直接在controller或接口方法上加role、permission的注解,标注该接口的所需权限,以此来控制该接口的调用者权限。
本项目是在微服务架构下,效仿shiro的使用模式,在各服务中的Controller上标记注解,但是在网关层对服务免登录,角色,权限进行校验的落地实现。
本项目目前集成了Zuul和Spring Cloud Gateway, 微服务端和网关端均仅需一个注解即可投入使用
#### 软件架构

各个微服务在启动后,就上传自己的所有权限信息到redis,网关监听redis的变化,及时将各微服务的接口权限变更信息更新到内存。当有用户请求时,网关就根据自己缓存的信息,对请求的接口地址进行匹配,判断用户角色、权限是否和各微服务里映射的权限信息相符,然后决定是否放行。
#### 安装教程
##### 微服务端
```pom
com.gitee.scottxuan.auth-spring-cloud
auth-spring-cloud-client-starter
7e4b309aa9
jitpack.io
https://jitpack.io
```
##### 网关端(Zuul和Gateway)
```pom
com.gitee.scottxuan.auth-spring-cloud
auth-spring-cloud-server-starter
7e4b309aa9
jitpack.io
https://jitpack.io
```
#### 微服务端使用
添加好依赖,配置好redis的连接地址,然后在主启动类上加上@EnableAuthClient注解。同时在Controller层的接口上标注免登录登录接口、接口需要的角色、接口需要的权限,当服务启动后就会自动上传所有的权限信息到redis里,并通知网关拉取该服务全部的权限信息。

Controller上添加
@NoRequiresLogin 该接口不需要登录即可访问
@RequiresRoles 该接口需要什么角色才可以访问
@RequiresPermissions 该接口需要什么权限才可以访问

#### 网关端使用
##### 主启动类配置
添加好依赖,配置好redis的连接地址,然后在主启动类上加上@EnableAuthServer注解即可。当网关启动会拉取所有添加了@EnableClientAuth注解的微服务端的权限信息,当服务端重启网关端会监听到该微服务端权限变动事件,自动拉取最新的微服务端权限信息至内存中

##### 网关端预留配置项

##### 需要自行继承的类-权限

##### 需要自行继承的类-黑白名单
仅在开启类黑白名单配置后该类才生效

#### 注意事项
1: 如果网关采用的是Zuul, 因为Zuul在路由失败后,都会抛出ZuulException异常, 需要使用者在网关异常处理中,对ZuulException的状态值进行判断,
401:认证失败(即该接口需要登录,当前访问者未登录)
403:角色权限校验失败(即该接口需要的角色权限信息,当前登录用户未持有)
407:IP白名当或者黑名单校验不通过,访问拒绝
2:如果网关采用的是Gateway, 针对不同的状况会抛出不一样的异常
NoLoginException:认证失败(即该接口需要登录,当前访问者未登录)
NoRolePermissionException:角色权限校验失败(即该接口需要的角色权限信息,当前登录用户未持有)
IpRefuseException:IP白名当或者黑名单校验不通过,访问拒绝