# ggsaas
**Repository Path**: lwstudy/ggsaas
## Basic Information
- **Project Name**: ggsaas
- **Description**: 龟谷思必得SaaS开源项目
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2021-09-30
- **Last Updated**: 2022-06-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ggsaas
#### 介绍
龟谷思必得SaaS开源项目
#### 软件架构
软件架构说明
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
1. xxxx
2. xxxx
3. xxxx
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 码云特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
## pom 结构
根 pom 只用来标识 modules
```xml
saas-base/saas-parent-pom
saas-base/saas-tool
saas-base/saas-web
saas-gateway
saas-service-api/saas-common-service-api
saas-service-api/saas-user-service-api
saas-service/saas-common-service
saas-service/saas-user-service
```
模块全部使用 saas-parent-pom 作为 parent
```xml
saas-parent-pom
cn.ggsaas
0.0.1-SNAPSHOT
```
pom 结构:
```
ggsaas
├── saas-gateway -- 网关
└── saas-tool -- 基础工具
├── saas-common-service -- 公共服务
├── saas-common-service-api -- 公共服务api
└── saas-tool -- 基础工具
└── saas-web -- web 服务
└── saas-tool -- 基础工具
└── saas-user-service -- 用户服务
└── saas-user-service-api -- 用户服务api
└── saas-tool -- 基础工具
└── saas-web -- web 服务
└── saas-tool -- 基础工具
```
模块结构
```
ggsaas
└── saas-base -- 基础模块集合
├── saas-parent-pom -- pom parent
├── saas-tool -- 基础工具
└── saas-web -- web 服务
├── saas-gateway -- 网关
└── saas-service-api -- api模块集合
├── saas-common-service-api -- 公共服务api
└── saas-user-service-api -- 用户服务api
└── saas-service -- 服务某块集合
├── saas-common-service -- 公共服务
└── saas-user-service -- 用户服务
```
## 组织结构设计
```
user -> company -> service -> menu // 此用户可被设置的所有权限
-> role -> menu // 此用户被设置的权限
```
## API 安全 设计
### sql 注入
使用防止 sql 注入的框架,并且不使用 SQL 拼凑的方式。
### 流控
限流机制生效时,请求立即拒绝,返回 http 状态码 429。
### 过滤器选择
- 使用 Spring 提供的 OncePerRequestFilter 保证一个请求只会执行一次。
- 声明 @Component 自动加入 Spring 过滤器链,@Order 可指定过滤器链顺序。
### 加密方法
- md5 不安全,可被破解,每次加密后的密文都是一样的。
- 加盐可防止 md5 的不安全问题,盐存在哪里是个问题,可使用加密算法让盐的存储无痕。
### https
- 保证目的地准确
- 保证数据包不会被修改
### 审计日志
- 在认证之后,授权之前。
- 审计日志要在进入和出去的时候进行记录。
- 可使用 Interceptor 进行审计日志,好处是拦截器走完了,进入 Interceptor 。
- Filter -> Interceptor -> ControllerAdvice -> AOP
- Interceptor 可继承 AsyncHandlerInterceptor ,配合 WebMvcConfigurer.addInterceptors 配置生效。
- preHandle 处理之前记录日志
- afterCompletion 处理之后(成功或者失败)更新日志
### 基于 Session 需要防止的攻击
- Session Fixation attack(会话固定攻击),攻击者诱骗劫持用户 session cookie,攻击者就可以以用户的身份进行操作。
- 解决方式是,每次登陆都销毁用的当前 session ,并重新生成一个。使用 spring security 是默认开启的。
## 微服务安全下常见问题
- 入口点很多,服务之间调用 api 需要做安全校验、跨网络,增加了安全问题,并且容易产生性能问题
- 分布式应用下如何串联日志
- 分布式应用下流控如何统一控制
- 容器化部署下证书和访问控制问题
- 分布式环境登陆状态分享问题,使用 spring session 可解决
### 网关
- 业务服务不因该有安全相关的逻辑。如果每个业务服务有安全相关的服务,如果需要解决一个安全问题时,所有业务服务都要重新部署
- 业务服务只能网关去访问,不允许外部访问。如果多个服务同时暴露,会增加外部访问的复杂性
- 网关与认证服务器做交互,来判断是否可以访问各业务服务。解耦后降低微服务复杂性