干货 | 微服务架构下 Spring Cloud OAuth2 通用权限管理系统
Posted 程序员泥瓦匠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货 | 微服务架构下 Spring Cloud OAuth2 通用权限管理系统相关的知识,希望对你有一定的参考价值。
点击蓝色“泥瓦匠BYSocket”,关注我哟
加个“星标”,不忘文末签到哦
项目地址
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版本是原生扩展
目前支持的限流粒度
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 原生写法
<template>
<el-table
:data="tableData"
style="width: 100%">
<el-table-column
prop="date"
label="日期"
width="180">
</el-table-column>
...
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}
...
]
}
}
}
</script>
项目截图
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-
号外:为读者持续几份最新教程,覆盖了 Spring Boot、Spring Cloud、微服务架构等。
热门文章:
》
推荐号主
文末力荐公益
聆听做技术你的困惑,并解答
如果文章对你有帮助的话
↓↓↓↓
以上是关于干货 | 微服务架构下 Spring Cloud OAuth2 通用权限管理系统的主要内容,如果未能解决你的问题,请参考以下文章
干货 | 放弃Dubbo,选择最流行的Spring Cloud微服务架构实践总结
微服务架构 | 8.1 使用 Spring Cloud Stream 整合 Apache kafka #yyds干货盘点#
高并发高可用微服务架构选型Dubbo与Spring Cloud纯干货,必收藏!