Awesome Open Source
Awesome Open Source

jiiiiiin-security

一个前后端分离的内管基础项目

原则

  • 以最少的表结构字段完成一个基础应用,以便在以此完成实际项目时有更多的扩充自由

如果你仅仅需要一个简单的内管系统,请切换到master分支,其仅仅是一个spring-boot前后端分离基础应用,当前分支,是用来学习和实践spring-cloud微服务框架所开

功能截图

以下是部分功能截图

快速开始

  • 视频演示

注意:目前该视频是针对master分支录制,等当前分支对spring-cloud实践有一个基础眉目我会在重新录制响应视频,但是这个视频对于jiiiiiin-service-manager 内管的聚合项目也具有参考价值,目前这块改动不大

Watch the video

下载高清视频

项目结构说明

.
├── 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 ServiceMiddle 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% EasyCaptchakaptcha两种验证码库的支持
集成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_resourcemng_interface是多对多关系,因为某一个接口,比如查询资源树接口在角色管理列表和资源管理列表两个页面都会被调用,且存在一个资源记录会调用多个接口,故我觉得这样来设计表机构,多加这一张表,才能更清晰的将意思表达到位,且方便维护
persistent_logins spring security 记住用户所涉及表
springsocial_UserConnection spring social 第三方授权信息关联表

所用技术栈

后台

前端

参考


Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
java (30,352
vue (4,029
redis (901
spring-boot (726
microservice (357
swagger (350
spring-cloud (210
apollo (168
spring-security (126
rbac (94
mybatis-plus (41
spring-session (15

Find Open Source By Browsing 7,000 Topics Across 59 Categories