# 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 可解决 ### 网关 - 业务服务不因该有安全相关的逻辑。如果每个业务服务有安全相关的服务,如果需要解决一个安全问题时,所有业务服务都要重新部署 - 业务服务只能网关去访问,不允许外部访问。如果多个服务同时暴露,会增加外部访问的复杂性 - 网关与认证服务器做交互,来判断是否可以访问各业务服务。解耦后降低微服务复杂性