微服务接入oauth2_干货 | 微服务架构下 Spring Cloud OAuth2 通用权限管理系统

原标题:干货 | 微服务架构下 Spring Cloud OAuth2 通用权限管理系统

加个“星标”,不忘文末签到哦

作者:王杰

项目地址

Gitee: https://gitee.com/log4j/pig

Github地址失效上Gitee: https://github.com/pig4cloud/pig

演示环境: http://pigx.pig4cloud.com

关于作者: https://gitee.com/gitee-stars/15

Pig Microservice Architecture

基于 Spring Cloud Greenwich 、Spring Security OAuth2 的RBAC权限管理系统 (Zuul 版本参考 1.x 分支)

基于数据驱动视图的理念封装 Element-ui,即使没有 vue 的使用经验也能快速上手

提供对常见容器化支持 Docker、Kubernetes、Rancher2 支持

提供 lambda 、stream api 、webflux 的生产实践1. 项目核心

一个注解接入OAuth 2.0 认证。 借助spring security 完成企业级权限设计,杜绝重复造轮子

让更多的微服务耳熟能详的名次,比如灰度发布、流量控制、动态路由等不仅存在于PPT,通过Spring Cloud 作为载体实现

几行代码完成Vue 的CRUD。 运用layui、easyui 数据驱动视图的理念封装,让后端工程师无缝上手2. 资源服务器接入

一个EnablePigResourceServer 注解 即可接入oauth2 服务器,权限管理被spring security接管。相较于原生的spring security oauth2 复杂的配置,EnablePigResourceServer 完成了资源服务器的全部功能 及其整合注册中的负载均衡

@EnablePigResourceServer

@EnablePigFeignClients

@SpringCloudApplication

public class PigAdminApplication {

public static void main(String[] args) {

SpringApplication.run(PigAdminApplication.class, args);

}

}3. 服务端动态路由

动态路由需要达到可持久化配置,动态刷新的效果。不仅要能满足从spring的配置文件properties加载路由信息,还需要从数据库加载我们的配置。另外一点是,路由信息在容器启动时就已经加载进入了内存,我们希望配置完成后,实施发布,动态刷新内存中的路由信息,达到不停机维护路由信息的效果,无论是zuul,还是spring cloud gateway 都提供了实现.通过内存 + Redis 的二级缓存策略让性能更加高效

4. 单点登录

单点登录是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。pig 1.X 分支基于 Spring security oauth 也提供了生产实践

5. 灰度发布

通过客户端声明的不同版本,可以通过网关进行转发到不同版本的业务微服务,实现生产不停机的灰度发布,保障服务的高可用。

在微服务的eureka客户端声明版本所属

eureka:

instance:

metadata-map:

version: v1.0

6. 多维度限流

zuul版本整合spring-cloud-zuul-ratelimit,gateway版本是原生扩展

目前支持的限流粒度

1.服务粒度 (默认配置,当前服务模块的限流控制)

2.用户粒度 (详细说明,见文末总结)

3.ORIGIN粒度 (用户请求的origin作为粒度控制)

4.接口粒度 (请求接口的地址作为粒度控制)

7. 分库分表

zuul版本.采用现在 Sharding-JDBC实现分库分表。主要业务场景是对日志表进行安装ID hash 进行拆分,避免生产大数据量存储问题。在Java的JDBC层以对业务应用零侵入的方式额外提供数据分片,读写分离,柔性事务和分布式治理能力。

8. 前端解决方案,数据驱动视图

只需要的配置每列属性即可完成入上图 令牌管理CRUD,是不是很神奇? 下边对两种写法进行对比,读者可以从代码量中比较出差异,实现的效果完全一致,让规则数据可以直接可视化。

// pig 前端写法

export const tableOption = {

border: true,

index: true,

indexLabel: '序号',

stripe: true,

menuAlign: 'center',

align: 'center',

viewBtn: true,

addBtn: false,

editBtn: false,

delBtn: false,

column: [{

label: '用户ID',

prop: 'user_id',

align: 'center'

}

...

]

}

// element 原生写法

:data="tableData"

style="width: 100%">

prop="date"

label="日期"

width="180">

...

<>

export default {

data() {

return {

tableData: [{

date: '2016-05-02',

name: '王小虎',

address: '上海市普陀区金沙江路 1518 弄'

}

...

]

}

}

}

>项目截图

9. 总结

Pig 1.0 已经在多家公司内部生产运行,各方面表现还不错。提供了从开发到生产的整套解决方案

Pig 2.0 聚焦瘦身减少中间件的引入,目的是让更多人快速以pig入门Spring Cloud 提供完整的组件链,快速上手。

限于篇幅以上只是对部分功能进行说明,欢迎大家交流学习

以下专题教程也许您会有兴趣

《Spring Boot 2.x 系列教程》 https://www.bysocket.com/springboot

《Java 核心系列教程》 https://www.bysocket.com/archives/2100

-The End-

推荐号主

文末力荐公益

聆听做技术你的困惑,并解答

责任编辑:

你可能感兴趣的:(微服务接入oauth2)