Jiiiiiin / Jiiiiiin Security
Programming Languages
Projects that are alternatives of or similar to Jiiiiiin Security
jiiiiiin-security
一个前后端分离的内管基础项目
原则
- 以最少的表结构字段完成一个基础应用,以便在以此完成实际项目时有更多的扩充自由
如果你仅仅需要一个简单的内管系统,请切换到master分支,其仅仅是一个spring-boot前后端分离基础应用,当前分支,是用来学习和实践spring-cloud微服务框架所开
功能截图
以下是部分功能截图
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
快速开始
- 视频演示
注意:目前该视频是针对master分支录制,等当前分支对spring-cloud实践有一个基础眉目我会在重新录制响应视频,但是这个视频对于
jiiiiiin-service-manager 内管的聚合项目
也具有参考价值,目前这块改动不大
项目结构说明
.
├── pom.xml 公共pom
├── apollo-cache-dir (apollo本地缓存目录,见配置)
├── config 各个边界服务、后端服务的apollo配置目录
├── db 数据库初始化脚本
├── jiiiiiin-lib 自定义库
│ ├── jiiiiiin-data-orm orm层模块(目前主要针对Mybatis-Plus)
│ ├── jiiiiiin-security-app 针对JWT Token的安全模块(lib,目前没有依赖)
│ ├── jiiiiiin-security-authorize 后端RBAC抽象模块(lib)
│ ├── jiiiiiin-security-browser 针对Session的安全层模块(lib)
│ ├── jiiiiiin-security-core 安全层基础模块(lib,处理Spring-Security相关基础配置)
│ ├── jiiiiiin-module-common 应用通用模块(目前内管依赖)
├── jiiiiiin-eureka-server 注册中心服务端(通用服务)
├── jiiiiiin-gateway 网关(通用服务)
├── jiiiiiin-hystrix
│ ├── jiiiiiin-hystrix-dashboard Hystrix熔断监服务(通用服务)
│ ├── jiiiiiin-hystrix-tuibine Hystrix Turbine聚合服务(通用服务)
├── jiiiiiin-edge-service 边界服务(微服务中聚合子服务的聚合项目)
│ ├── jiiiiiin-service-manager 内管的聚合项目
│ │ ├── jiiiiiin-client-manager 内管前端应用(Vue项目,依赖d2-admin模块(1.6.9最新))
│ │ ├── jiiiiiin-module-mngauth 管理模块(目前内管依赖)
│ │ ├── jiiiiiin-server-manager 内管后端应用
├── jiiiiiin-service 后端服务(微服务的聚合项目)
│ ├── jiiiiiin-order 订单的聚合项目
│ │ ├── jiiiiiin-order-server 后端应用
│ ├── jiiiiiin-product 商品的聚合项目
│ │ ├── jiiiiiin-product-client 商品Feign客户端(提供给调用方使用,如在创建订单时候)
│ │ ├── jiiiiiin-product-server 后端应用
微服务代码划分
-
jiiiiiin-service
为【原子服务】- 一个原子服务,有划分为:
- xxx-业务标识-client Feign客户端(提供给调用方使用)
- xxx-业务标识-server 服务本身
- xxx-业务标识-common 当前原子服务中client和server共同依赖的代码,如实体等
- 一个原子服务,有划分为:
-
jiiiiiin-edge-service
为【边界服务服务】- 边界服务即提供给外部客户端(如:App)来调用,组织比较自由,但有一个原则及其只会依赖【原子服务】,一般不作为内部服务提供者
即下图中的Edge Service
和Middle Tier Service
:
-
提示步骤:
-
修改本地hosts
-
win配置方法 | mac配置方法 | 建议使用 switchhost,开源群下载,对自己的网络环境自信的朋友,也可以直接官网下载
# 本地测试环境 127.0.0.1 jiiiiiin-redis 127.0.0.1 jiiiiiin-mysql 127.0.0.1 jiiiiiin-eureka 127.0.0.1 jiiiiiin-gateway 127.0.0.1 jiiiiiin-hystrix-dashboard 127.0.0.1 jiiiiiin-hystrix-tuibine 127.0.0.1 jiiiiiin-springboot-admin 127.0.0.1 jiiiiiin-server-manager
-
-
启动jiiiiiin-mysql & jiiiiiin-redis
-
启动apollo
注意这里可以自行控制apollo的连接环境,可以使用
apollo-Quick-Start
快速上手实践-
启动jiiiiiin-eureka::DiscoveryServerApplication
-
启动监控服务
- jiiiiiin-hystrix-dashboard::HystrixDashboardApplication
- jiiiiiin-hystrix-tuibine::HystrixTuibineApplication
- jiiiiiin-springboot-admin::SpringBootAdminApplication
- jiiiiiin-zipkin::集成方式参考,建议使用docker直接部署服务端
-
启动后端内管应用
-
启动前端内管应用:jiiiiiin-client-manager::j jiiiiiin-client-manager && npm run serve
一切ok,就可以直接访问
jiiiiiin-server-manager:9000
查看管理控制台了 :) -
计划
- SpringCloud
近期维护:新增feature/springcloud分支,将会在该分支尝试spring-cloud探索,目前基于第一代spring-cloud基础组件,核心为Netfix套件,进行一个初探
预期实践架构(来自微服务架构实战160讲)
功能 | 完成状态 | 简介 |
---|---|---|
实践Eureka 服务注册发现 | 90% | 集成Service Discovery (Eureka)服务注册中心 |
实践Zuul 服务网关 | 90% | 集成Intelligent Routing (Zuul)服务网关 |
实践Feign/RestTemplate 服务间通讯和负载均衡 | 90% | 实践服务间的调用 |
实践HYSTRIX/Turbine 服务的容错 | 90% | 实现通过Turbine聚合各个服务的Hystrix监控信息,通过jiiiiiin-hystrix-dashboard 项目完成统一聚合监控,需要在dashboard中键入jiiiiiin-hystrix-tuibine 的集群监控url,如http://localhost:8962/turbine.stream
|
实践Zipkin 服务链路追踪 | 90% | 集成方式参考,建议使用docker直接部署服务端 |
集成Spring Boot Admin | 90% | 集成方式参考 |
实践apollo 服务配置管理 | 90% | 实践Apollo(阿波罗) |
实践OAuth2授权认证中心 服务安全 | 0% | |
服务实时日志 | 0% | |
代码自动生成 | 0% | 服务端3层代码自动生成,待适配目前的目录结构 |
docker化部署实践 | 0% |
- 业务
将会通过一个电商模块来实践服务划分
模块名称 | 完成状态 | 简介 |
---|---|---|
用户管理 | 100% | 用来管理系统存在的用户 |
角色管理 | 100% | 用来管理系统定义的角色 |
资源管理 | 100% | 用来管理系统定义的资源 |
接口管理 | 100% | 用来管理后台对应的接口集合 |
商品管理 | 10% | 商家用来管理自己的商品 |
订单管理 | 10% | 商家用来管理自己的订单 |
- 已经实践的基础功能
功能 | 完成状态 | 简介 |
---|---|---|
RBAC后端权限控制 | 100% | 基于Spring Security的后端RBAC权限控制 |
RBAC前端权限控制 | 100% |
1.基于vue-viewplus,实现了一个自定义模块 2.实现前端页面可访问性控制,通过路由拦截,判断用户待访问页面是否已经授权 3.实现可见页面的局部UI组件的可使用性或可见性控制,基于自定义 v-access 指令,对比声明的接口或资源别是否已经授权
|
集成vue-viewplus | 100% | vue-viewplus一个简化Vue应用开发的工具库 |
会话并发控制 | 100% | 使用SpringSecurity#concurrency-control实现应用中同一用户在同时只能有一个是终端(渠道)成功登录应用,后登录终端会导致前一个会话失效 |
会话集群共享 | 100% | 使用Spring Session与Redis实现会话的共享存储和集群部署 |
记住我控制 | 50% | 使用spring-security实现remember-me功能 |
d2-mng-page | 100% | 自定义管理页面组件(统一管理:分页、检索、table、编辑),为了统一审美 |
Swagger集成 | 100% | 用来构建服务端的RESTFull Api接口 |
spring-mobile | 100% | 用来进行渠道判断,使得应用能根据请求的设备响应不同的数据格式 |
Gif验证码 | 100% | EasyCaptcha和kaptcha两种验证码库的支持 |
集成druid监控 | 100% | druid |
表结构和权限说明
表名称 | 简介 |
---|---|
mng_admin | 【用户表】,使用channel 字段可以区分不同业务系统的用户,如这里0 标识内管 |
mng_role | 【角色表】,使用channel 字段可以区分不同业务系统的角色,如这里0 标识内管 |
mng_role_admin | 【角色用户关联表】,这套系统中,角色和用户是可以多对多配置的 |
mng_resource | 【权限资源表】,使用channel 字段可以区分不同业务系统的资源,如这里0 标识内管,另外type 用来标识资源的类型,在这里只有类型: 1:菜单(默认) 0:按钮 两种类型,并且没有直接定义一个类url 字段取标识资源记录对应的后端某一个接口,是因为如一个菜单点击之后到达的页面可能要发多个后台交易,故一个字段来标识这多个交易容易导致混乱,所以在传统的RBAC表结构之下新增了mng_interface 【系统接口表】来定义,而资源则是给业务人员配置角色或菜单时使用;这张表还有一个特点是将前端Vue Router的页面路径以path 字段标识,以方便前后端的权限管理 |
mng_role_resource | 【角色资源关联表】,用户、角色、资源都可以由业务人员进行关联操作 |
mng_interface | 【系统接口表】,使用channel 字段可以区分不同业务系统的接口,如这里0 标识内管,使用url+method 来区分后台的某一个接口 |
mng_resource_interface | 【资源接口关联表】,mng_resource 和mng_interface 是多对多关系,因为某一个接口,比如查询资源树 接口在角色管理列表和资源管理列表两个页面都会被调用,且存在一个资源记录会调用多个接口,故我觉得这样来设计表机构,多加这一张表,才能更清晰的将意思表达到位,且方便维护 |
persistent_logins | spring security 记住用户所涉及表 |
springsocial_UserConnection | spring social 第三方授权信息关联表 |
-
关于前端
rbac
权限控制,详见下面链接:
所用技术栈
后台
- spring-boot
- spring-security
- spring-session
- mybatis-plus
- rzwitserloot/lombok
- ctripcorp/apollo
- spring-cloud/spring-cloud-netflix