# 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, 微服务端和网关端均仅需一个注解即可投入使用 #### 软件架构 ![image-20210825110759377](https://gitee.com/scottxuan/auth-spring-cloud/raw/master/image/1.png) 各个微服务在启动后,就上传自己的所有权限信息到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里,并通知网关拉取该服务全部的权限信息。 ![image-20210825113929701](https://gitee.com/scottxuan/auth-spring-cloud/raw/master/image/2.png) Controller上添加 @NoRequiresLogin 该接口不需要登录即可访问 @RequiresRoles 该接口需要什么角色才可以访问 @RequiresPermissions 该接口需要什么权限才可以访问 ![image-20210825114328617](https://gitee.com/scottxuan/auth-spring-cloud/raw/master/image/3.png) #### 网关端使用 ##### 主启动类配置 添加好依赖,配置好redis的连接地址,然后在主启动类上加上@EnableAuthServer注解即可。当网关启动会拉取所有添加了@EnableClientAuth注解的微服务端的权限信息,当服务端重启网关端会监听到该微服务端权限变动事件,自动拉取最新的微服务端权限信息至内存中 ![image-20210825115836291](https://gitee.com/scottxuan/auth-spring-cloud/raw/master/image/4.png) ##### 网关端预留配置项 ![image-20210825120104490](https://gitee.com/scottxuan/auth-spring-cloud/raw/master/image/5.png) ##### 需要自行继承的类-权限 ![image-20210825120417753](https://gitee.com/scottxuan/auth-spring-cloud/raw/master/image/6.png) ##### 需要自行继承的类-黑白名单 仅在开启类黑白名单配置后该类才生效 ![image-20210825120649503](https://gitee.com/scottxuan/auth-spring-cloud/raw/master/image/7.png) #### 注意事项 1: 如果网关采用的是Zuul, 因为Zuul在路由失败后,都会抛出ZuulException异常, 需要使用者在网关异常处理中,对ZuulException的状态值进行判断, 401:认证失败(即该接口需要登录,当前访问者未登录) 403:角色权限校验失败(即该接口需要的角色权限信息,当前登录用户未持有) 407:IP白名当或者黑名单校验不通过,访问拒绝 2:如果网关采用的是Gateway, 针对不同的状况会抛出不一样的异常 NoLoginException:认证失败(即该接口需要登录,当前访问者未登录) NoRolePermissionException:角色权限校验失败(即该接口需要的角色权限信息,当前登录用户未持有) IpRefuseException:IP白名当或者黑名单校验不通过,访问拒绝