You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

445 lines
23 KiB

1 month ago
# 安全配置
<cite>
**本文引用的文件**
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
- [AuthLoginUser.java](file://crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java)
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
- [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java)
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java)
- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java)
- [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java)
- [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java)
- [ThirdPartyUserInfo.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java)
- [AuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java)
- [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java)
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
- [SysMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java)
- [application.yml](file://crm-app/src/main/resources/application.yml)
- [application.yml](file://crm-auth/src/main/resources/application.yml)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向安全配置与鉴权体系,覆盖JWT认证、用户权限、跨域、过滤器链、第三方登录集成、密码加密、会话管理、CSRF防护、安全审计日志、异常处理与安全漏洞防护策略。文档以代码级为依据,结合流程图与类图帮助读者快速理解并落地实施。
## 项目结构
本项目采用多模块结构,安全相关能力集中在 crm-auth(认证与授权)与 crm-base(通用基础能力)两个模块:
- crm-auth:负责认证控制器、JWT过滤器、令牌服务、权限配置、数据范围拦截器、第三方登录客户端等。
- crm-base:提供全局异常处理、CORS跨域、追踪ID过滤器、通用安全工具类等。
```mermaid
graph TB
subgraph "应用入口"
APP["应用启动<br/>application.yml"]
end
subgraph "认证与授权(crm-auth)"
SEC_CFG["SecurityConfig<br/>安全配置"]
AUTH_CTRL["AuthController<br/>登录/登出/刷新"]
JWT_FILTER["JwtAuthenticationFilter<br/>JWT过滤器"]
TOKEN_SVC["TokenService<br/>令牌生成/校验"]
PERM_CFG["PermissionConfig<br/>权限规则"]
DATA_SCOPE_INT["DataScopeInterceptor<br/>数据范围拦截"]
EXC_HANDLERS["SecurityExceptionHandlers<br/>安全异常处理"]
DINGTALK["DingTalkAuthClient<br/>钉钉登录"]
TP_FACTORY["ThirdPartyAuthClientFactory<br/>第三方工厂"]
TP_INFO["ThirdPartyUserInfo<br/>第三方用户信息"]
end
subgraph "基础能力(crm-base)"
CORS["CorsConfig<br/>跨域配置"]
GLOBAL_EXC["GlobalExceptionHandlerAdvice<br/>全局异常"]
TRACE["TraceIdFilter<br/>链路追踪"]
end
APP --> SEC_CFG
SEC_CFG --> JWT_FILTER
SEC_CFG --> PERM_CFG
AUTH_CTRL --> TOKEN_SVC
AUTH_CTRL --> DINGTALK
DINGTALK --> TP_FACTORY
TP_FACTORY --> TP_INFO
SEC_CFG --> DATA_SCOPE_INT
SEC_CFG --> EXC_HANDLERS
SEC_CFG --> CORS
SEC_CFG --> TRACE
```
图表来源
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
- [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java)
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java)
- [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java)
- [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java)
- [ThirdPartyUserInfo.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java)
章节来源
- [application.yml](file://crm-app/src/main/resources/application.yml)
- [application.yml](file://crm-auth/src/main/resources/application.yml)
## 核心组件
- 安全配置与过滤器链:通过统一安全配置装配JWT过滤器、跨域、异常处理器、数据范围拦截器等,形成请求进入业务前的完整安全链。
- 令牌服务:负责JWT令牌的签发、解析、刷新与黑名单/过期策略(如使用缓存)。
- 认证控制器:封装登录、登出、刷新令牌、第三方登录回调等接口。
- 权限配置:定义URL级别的访问控制、角色/权限映射与数据范围策略。
- 第三方登录:抽象第三方认证客户端与工厂,支持扩展更多平台。
- 基础安全能力:全局异常处理、跨域、链路追踪等。
章节来源
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
- [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java)
- [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java)
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java)
- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java)
## 架构总览
下图展示一次“用户名+密码”登录的端到端流程,涵盖过滤器链、令牌服务、用户服务与权限加载。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Filter as "JwtAuthenticationFilter"
participant Controller as "AuthController"
participant TokenSvc as "TokenService"
participant AuthSrv as "IAuthService"
participant UserMapper as "AuthUserMapper"
participant MenuMapper as "SysMenuMapper"
Client->>Filter : "POST /auth/login"
Filter-->>Controller : "放行到控制器"
Controller->>AuthSrv : "验证用户名/密码"
AuthSrv->>UserMapper : "查询用户与状态"
UserMapper-->>AuthSrv : "用户实体"
AuthSrv-->>Controller : "认证成功"
Controller->>TokenSvc : "签发JWT(含角色/权限)"
TokenSvc-->>Controller : "返回令牌"
Controller-->>Client : "登录成功响应"
Note over Filter,Controller : "后续请求携带Authorization头<br/>由过滤器完成鉴权与上下文注入"
```
图表来源
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
- [IAuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java)
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
- [SysMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java)
## 详细组件分析
### JWT认证与令牌服务
- 令牌生成:在认证成功后,根据用户主体信息(含角色、权限)生成JWT,设置有效期与必要声明。
- 令牌校验:过滤器从请求头提取令牌,解析并写入安全上下文,供后续鉴权使用。
- 令牌刷新:提供刷新接口,基于旧令牌签发新令牌,可配合黑名单或Redis实现主动失效。
- 安全建议:
- 使用强随机密钥与合适的算法;避免将敏感信息放入令牌载荷。
- 合理设置过期时间,结合刷新机制平衡体验与安全。
- 对敏感操作增加二次确认或短期令牌。
```mermaid
classDiagram
class TokenService {
+签发令牌(用户信息)
+解析令牌()
+刷新令牌(旧令牌)
+校验令牌有效性()
}
class JwtAuthenticationFilter {
+doFilter(请求, 响应, 过滤器链)
-解析Authorization头()
-写入安全上下文()
}
class AuthLoginUser {
+用户标识
+角色集合
+权限集合
+是否有效()
}
TokenService <.. JwtAuthenticationFilter : "解析/校验"
JwtAuthenticationFilter --> AuthLoginUser : "构建上下文"
```
图表来源
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [AuthLoginUser.java](file://crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java)
章节来源
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [AuthLoginUser.java](file://crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java)
### 用户登录流程
- 输入校验:控制器接收登录参数并进行基础校验。
- 身份验证:调用认证服务校验用户名/密码及账户状态。
- 权限加载:成功后加载用户角色与菜单权限,写入令牌载荷。
- 响应输出:返回令牌及相关用户信息。
```mermaid
flowchart TD
Start(["开始"]) --> Validate["参数校验"]
Validate --> Valid{"校验通过?"}
Valid --> |否| Error["返回参数错误"]
Valid --> |是| CheckPwd["校验密码与状态"]
CheckPwd --> PwdOk{"密码正确且可用?"}
PwdOk --> |否| AuthFail["返回认证失败"]
PwdOk --> |是| LoadPerm["加载角色与权限"]
LoadPerm --> GenToken["生成JWT"]
GenToken --> ReturnResp["返回登录结果"]
ReturnResp --> End(["结束"])
AuthFail --> End
Error --> End
```
图表来源
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
- [IAuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java)
- [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java)
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
- [SysMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java)
章节来源
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
- [IAuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java)
- [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java)
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
- [SysMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java)
### 权限与数据范围拦截
- URL级权限:通过权限配置定义白名单与受保护路径,结合角色/权限进行拦截。
- 数据范围:通过拦截器注入数据可见性上下文,影响查询SQL的数据范围过滤。
- 最佳实践:
- 最小权限原则,默认拒绝未授权访问。
- 将静态资源与公开接口加入白名单,减少不必要的鉴权开销。
- 数据范围按租户/部门维度隔离,避免越权访问。
```mermaid
classDiagram
class PermissionConfig {
+配置白名单
+配置受保护路径
+角色/权限映射
}
class DataScopeInterceptor {
+preHandle(请求, 响应, 处理器)
-读取用户数据范围
-注入可见性上下文
}
PermissionConfig <.. DataScopeInterceptor : "读取策略"
```
图表来源
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
章节来源
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
### 跨域与安全过滤器链
- 跨域配置:统一允许的来源、方法与头部,限制暴露头与凭据策略。
- 过滤器链顺序:追踪ID过滤器 -> 跨域处理 -> JWT过滤器 -> 权限拦截 -> 业务控制器。
- 建议:
- 生产环境严格限制允许的源与方法。
- 开启必要的请求体大小限制与超时配置。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Trace as "TraceIdFilter"
participant CORS as "CorsConfig"
participant JWT as "JwtAuthenticationFilter"
participant Perm as "PermissionConfig"
participant Ctrl as "AuthController"
Client->>Trace : "HTTP请求"
Trace-->>CORS : "设置追踪ID"
CORS-->>JWT : "跨域预检/实际请求"
JWT-->>Perm : "鉴权检查"
Perm-->>Ctrl : "放行至控制器"
Ctrl-->>Client : "响应"
```
图表来源
- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java)
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
章节来源
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
### 第三方登录集成
- 抽象客户端:定义统一的第三方认证客户端接口与用户信息模型。
- 工厂模式:根据平台类型创建对应客户端实例,便于扩展新平台。
- 典型流程:前端跳转第三方授权 -> 回调服务端 -> 获取第三方用户信息 -> 绑定本地用户 -> 签发JWT。
```mermaid
classDiagram
class ThirdPartyAuthClientFactory {
+创建客户端(平台类型)
}
class DingTalkAuthClient {
+获取授权码
+换取AccessToken
+拉取用户信息()
}
class ThirdPartyUserInfo {
+第三方用户标识
+昵称/头像
+邮箱/手机号
}
ThirdPartyAuthClientFactory --> DingTalkAuthClient : "创建实例"
DingTalkAuthClient --> ThirdPartyUserInfo : "返回用户信息"
```
图表来源
- [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java)
- [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java)
- [ThirdPartyUserInfo.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java)
章节来源
- [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java)
- [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java)
- [ThirdPartyUserInfo.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java)
### 安全异常处理与审计日志
- 全局异常:统一捕获业务异常、权限异常、资源不存在等,返回标准化响应。
- 安全异常:针对认证失败、令牌无效、越权访问等给出明确但不过度泄露信息的提示。
- 审计日志:记录关键安全事件(登录成功/失败、权限拒绝、第三方登录回调),包含追踪ID与IP。
```mermaid
flowchart TD
A["异常发生"] --> B{"异常类型"}
B --> |业务异常| C["业务异常处理器"]
B --> |权限异常| D["权限异常处理器"]
B --> |系统异常| E["系统异常处理器"]
C --> F["记录审计日志"]
D --> F
E --> F
F --> G["返回统一错误响应"]
```
图表来源
- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java)
- [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java)
- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java)
章节来源
- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java)
- [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java)
- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java)
## 依赖关系分析
- 控制器依赖服务层,服务层依赖Mapper进行数据访问。
- 安全过滤器依赖令牌服务与安全上下文对象。
- 权限配置与数据范围拦截器共同决定访问控制与数据可见性。
- 第三方登录通过工厂动态选择客户端,降低耦合。
```mermaid
graph LR
AuthCtrl["AuthController"] --> IAuthSrv["IAuthService"]
IAuthSrv --> AuthUserMapper["AuthUserMapper"]
IAuthSrv --> SysMenuMapper["SysMenuMapper"]
JwtFilter["JwtAuthenticationFilter"] --> TokenSvc["TokenService"]
JwtFilter --> AuthLoginUser["AuthLoginUser"]
PermCfg["PermissionConfig"] --> DataScopeInt["DataScopeInterceptor"]
TPFactory["ThirdPartyAuthClientFactory"] --> DingTalk["DingTalkAuthClient"]
DingTalk --> TPInfo["ThirdPartyUserInfo"]
```
图表来源
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
- [IAuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java)
- [AuthUserMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java)
- [SysMenuMapper.java](file://crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
- [AuthLoginUser.java](file://crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java)
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
- [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java)
- [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java)
- [ThirdPartyUserInfo.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java)
章节来源
- [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java)
- [IAuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java)
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java)
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java)
- [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java)
- [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java)
- [ThirdPartyUserInfo.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java)
## 性能考量
- 令牌解析与校验应尽可能轻量,必要时引入缓存以减少重复计算。
- 权限与菜单加载可缓存热点数据,降低数据库压力。
- 跨域预检请求较多时,合理设置预检缓存时间。
- 审计日志异步落盘,避免阻塞主流程。
- 连接池与线程池参数需根据压测调优。
[本节为通用指导,不直接分析具体文件]
## 故障排查指南
- 登录失败:检查用户名/密码、账户状态、第三方回调参数是否正确。
- 令牌无效:检查Authorization头格式、令牌是否过期或被吊销。
- 权限拒绝:核对角色/权限映射与路径白名单配置。
- 跨域错误:检查允许的源、方法、头部与凭据策略。
- 审计定位:通过追踪ID关联日志,定位请求全链路。
章节来源
- [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java)
- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java)
- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java)
## 结论
本项目的安全体系以JWT为核心,结合过滤器链、权限配置与数据范围拦截,实现了完整的认证与授权闭环。通过第三方登录工厂化设计,具备良好的可扩展性。配合全局异常处理与审计日志,提升了系统的可观测性与可维护性。建议在生产环境中持续优化令牌策略、权限缓存与审计性能,确保安全性与性能兼顾。
[本节为总结性内容,不直接分析具体文件]
## 附录
- 安全策略配置要点:
- 最小权限原则与默认拒绝。
- 严格的跨域与CORS策略。
- 合理的令牌生命周期与刷新机制。
- 敏感操作二次确认与短期令牌。
- 密码加密规则:
- 使用强哈希算法与盐值,禁止明文存储。
- 定期轮换密钥与升级算法。
- 会话管理与CSRF防护:
- 无状态JWT为主,必要时结合黑名单或Redis。
- 若启用Cookie会话,需开启CSRF防护并限制SameSite。
- 安全漏洞防护:
- 输入校验与输出编码,防止XSS/注入。
- 速率限制与防重放攻击。
- 安全头配置(HSTS、CSP等)。
[本节为通用指导,不直接分析具体文件]