微服务
-------------------------外部环境选型-------------------------
1. JVM版本: JDK 8
2. 构建工具: maven
3. 持续集成: jenkins
4. 数据库版本: MySQL 5.7.9
5. redis版本:6.0.6(redis集群,保持现状)
6. 中间件Message Queue的选型:
6.1 RocketMQ(物联网无关 消息发送)
6.2 EMQ(物联网 硬件相关) 协议mqtt
7. 全文搜索引擎:Elasticsearch(先集成,实际功能后期开发)
8. 注册中心 + 配置中心: nacos
9. 外部网关: Nginx (保持现状,产险版本)
10. 产线发布: docker
11. 文件服务器: oss、服务所在服务器(暂时使用部署服务的服务器,微服务架构中使用OSS,两套方案并行)
12. linux服务器:centos 7(Core)(Kernal:Linux 3.10.0-957.el7.X86_64) (保持现状)
-------------------------内部选型-------------------------
1. Spring Cloud Alibaba Version:2021.1
2. 网关: Spring Cloud Gateway
3. 内部微服务调用:Dubbo
4. 内部负载均衡: Dubbo自带负载均衡
5. 用户登录相关(oauth2)与服务鉴权:UAA
6. 服务鉴权: JWT token
7. 内部微服务——熔断机制:Sentinel
8. 分布式事务: Seata
9. 持久层框架: mybaits分页插件-PageHelper、通用Mapper
10. 监控/链路调用跟踪 skywalking(华为) CAT V3.0.0 (美团) (优先级较低,后续依据项目需要再集成)
11. 定时器: xxl-job
12. 后端管理平台:前端开发负责
13. 持久层代码生成器: Mybatis-plus-generator
14. 在线API: knife4j
15. 内部数据传输协议: json
16. 序列化反序列化: fastjson
------------------------基础服务模块划分相关()-----------------------------
1. gateway 网关
2. uaa 用户登录 鉴权相关 权限资源相关
3. file 附件管理 文件上传 OSS
4. msg 消息 短信
5. backend 后端管理平台提供接口 菜单、字典、地区、系统参数、操作日志。
6. example 示例工程 模板,方便快速建立工程。
7. util 公共库依赖
-------------------------其它规范工具-----------------------------------
1. 代码格式化规则:alibaba
2. 代码规范工具:checkstyle
3. Java代码bug分析工具:Findbugs
4. 开发工具: eclipse、idea
5. 测试相关:开发人员的单元测试要尽量全面
6. 对象转换库:BeanUtil
spring cloud alibaba 快速构建项目
https://start.aliyun.com/bootstrap.html
参考:Spring Cloud Gateway + Spring Security OAuth2 + JWT实现微服务统一认证授权鉴权
OAuth2
OAUth2就是一套广泛流行的认证授权协议,大白话说呢OAuth2这套协议中有两个核心的角色,认证服务器和资源服务器。
模块名称
模块名称 | OAuth2角色 | |
认证中心 | xx-uaa | 认证服务器 |
网关 | xx-gateway | 资源服务器 |
用户不能直接去访问资源服务器(网关),必须先到认证服务器认证,通过后颁发一个token令牌给你,你只有拿着token访问资源服务器才能通过,令牌token是有时间限制的,到时间了就无效。
其中网关为什么能作为“资源服务器”呢? 网关是作为各个微服务(会员服务、商品服务、订单服务等)统一入口,也就是这些资源服务的统一门面,在这里可以对JWT验签、JWT有效期判断、JWT携带角色权限判断。
JWT
JWT(JSON Web Token)它没啥悬乎的,就是一个特殊的token,最大的特性就是无状态,因为它本身可以携带用户的信息(用户ID、用户名、用户的角色集合等)
OAuth2和JWT关系
- OAuth2是一种认证授权的协议规范。
- JWT是基于token的安全认证协议的实现。
认证服务器
1 pom依赖
2 认证服务配置(AuthorizationServerConfig)
AuthorizationServerConfig这个配置类是整个认证服务实现的核心。总结下来就是两个关键点,客户端信息配置和access_token生成配置。
2.1 客户端信息配置
配置OAuth2认证允许接入的客户端的信息,因为接入OAuth2认证服务器首先得认可客户端,需要把客户端信息配置在认证服务器上来表示认证服务器所认可的客户端。一般可配置在认证服务器的内存中,但是这样很不方便管理扩展。所以实际最好配置在数据库中的,提供可视化界面对其进行管理,方便以后像PC端、APP端、小程序端等多端灵活接入。
Spring Security OAuth2官方提供的客户端信息表oauth_client_details
2.2 token生成配置
3 安全配置(WebSecurityConfig)
安全配置主要是配置请求访问权限、定义认证管理器、密码加密配置。
资源服务器
1 pom依赖2 配置文件(gateway.yaml)
3 鉴权管理器 AuthorizationManager implements ReactiveAuthorizationManager<AuthorizationContext>
鉴权管理器是作为资源服务器验证是否有权访问资源的裁决者
4 资源服务器配置 ResourceServerConfig
这里做的工作是将鉴权管理器AuthorizationManager配置到资源服务器、请求白名单放行、无权访问和无效token的自定义异常响应。
5 网关鉴权测试
idea中不存在.iml文件
项目主目录下执行命令行
mvn idea:module