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.
364 lines
18 KiB
364 lines
18 KiB
|
1 month ago
|
# 安全配置
|
||
|
|
|
||
|
|
<cite>
|
||
|
|
**本文引用的文件**
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
||
|
|
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
|
||
|
|
- [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java)
|
||
|
|
- [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.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)
|
||
|
|
- [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)
|
||
|
|
- [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. [附录](#附录)
|
||
|
|
|
||
|
|
## 简介
|
||
|
|
本文件面向CRM系统的安全配置,聚焦以下目标:
|
||
|
|
- 深入解析Spring Security主配置类(SecurityConfig)的过滤器链、异常处理、密码编码器与Bean注册。
|
||
|
|
- 说明权限配置(PermissionConfig)的作用,包括接口白名单、忽略路径与URL匹配规则。
|
||
|
|
- 解释跨域配置(CorsConfig)的安全考量与最佳实践。
|
||
|
|
- 梳理认证相关属性(AuthProperties)与配置文件示例。
|
||
|
|
- 提供自定义过滤器添加方式、URL匹配策略与安全建议。
|
||
|
|
|
||
|
|
## 项目结构
|
||
|
|
本项目采用多模块组织,安全能力主要分布在以下模块:
|
||
|
|
- crm-auth:认证授权核心,包含SecurityConfig、PermissionConfig、AuthProperties、JWT过滤器、令牌服务与异常处理器等。
|
||
|
|
- crm-base:基础能力,包含全局异常处理、跨域配置、通用工具与数据可见性控制等。
|
||
|
|
- crm-app:应用启动入口与全局配置聚合。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
graph TB
|
||
|
|
subgraph "认证授权模块(crm-auth)"
|
||
|
|
A["SecurityConfig"] --> B["PermissionConfig"]
|
||
|
|
A --> C["JwtAuthenticationFilter"]
|
||
|
|
A --> D["SecurityExceptionHandlers"]
|
||
|
|
C --> E["TokenService"]
|
||
|
|
F["AuthProperties"] --> A
|
||
|
|
end
|
||
|
|
subgraph "基础模块(crm-base)"
|
||
|
|
G["CorsConfig"]
|
||
|
|
H["GlobalExceptionHandlerAdvice"]
|
||
|
|
end
|
||
|
|
subgraph "应用层(crm-app)"
|
||
|
|
I["application.yml"]
|
||
|
|
end
|
||
|
|
A --> G
|
||
|
|
D --> H
|
||
|
|
I --> A
|
||
|
|
I --> G
|
||
|
|
```
|
||
|
|
|
||
|
|
图表来源
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
||
|
|
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.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)
|
||
|
|
- [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)
|
||
|
|
- [application.yml](file://crm-app/src/main/resources/application.yml)
|
||
|
|
- [application.yml](file://crm-auth/src/main/resources/application.yml)
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
||
|
|
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
- [application.yml](file://crm-app/src/main/resources/application.yml)
|
||
|
|
- [application.yml](file://crm-auth/src/main/resources/application.yml)
|
||
|
|
|
||
|
|
## 核心组件
|
||
|
|
- SecurityConfig:Spring Security主配置,负责构建过滤器链、注册自定义过滤器、设置请求授权规则、配置异常处理与密码编码器。
|
||
|
|
- PermissionConfig:权限与访问控制配置,集中管理接口白名单、忽略路径、URL匹配策略与鉴权注解生效范围。
|
||
|
|
- JwtAuthenticationFilter:基于JWT的请求级认证过滤器,负责从请求头提取并校验令牌,填充认证上下文。
|
||
|
|
- TokenService:令牌生成、刷新、校验与解析的核心服务。
|
||
|
|
- SecurityExceptionHandlers:统一安全异常处理器,将未认证、无权限等异常转换为标准响应。
|
||
|
|
- CorsConfig:跨域配置,定义允许的源、方法、头部与凭据策略,保障跨域安全。
|
||
|
|
- GlobalExceptionHandlerAdvice:全局异常处理,统一业务与系统异常的返回格式。
|
||
|
|
- AuthProperties:认证相关的外部化配置项,如JWT密钥、过期时间、白名单开关等。
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
||
|
|
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.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)
|
||
|
|
- [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)
|
||
|
|
- [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java)
|
||
|
|
|
||
|
|
## 架构总览
|
||
|
|
下图展示了请求进入后的安全处理流程:跨域预处理、JWT认证、权限判定、业务控制器执行与异常统一处理。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
sequenceDiagram
|
||
|
|
participant Client as "客户端"
|
||
|
|
participant Web as "Web容器"
|
||
|
|
participant CORS as "CorsConfig"
|
||
|
|
participant SEC as "SecurityConfig过滤器链"
|
||
|
|
participant JWT as "JwtAuthenticationFilter"
|
||
|
|
participant TKN as "TokenService"
|
||
|
|
participant PERM as "PermissionConfig"
|
||
|
|
participant CTRL as "业务控制器"
|
||
|
|
participant EXC as "SecurityExceptionHandlers/GlobalExceptionHandlerAdvice"
|
||
|
|
Client->>Web : HTTP请求
|
||
|
|
Web->>CORS : 预检/跨域检查
|
||
|
|
CORS-->>Web : 允许或拒绝
|
||
|
|
Web->>SEC : 进入安全过滤器链
|
||
|
|
SEC->>JWT : 解析并校验JWT
|
||
|
|
JWT->>TKN : 验证令牌有效性
|
||
|
|
TKN-->>JWT : 令牌状态
|
||
|
|
JWT-->>SEC : 填充认证上下文
|
||
|
|
SEC->>PERM : 判断是否白名单/忽略路径
|
||
|
|
alt 白名单或忽略路径
|
||
|
|
PERM-->>SEC : 放行
|
||
|
|
else 需要鉴权
|
||
|
|
PERM-->>SEC : 继续鉴权
|
||
|
|
end
|
||
|
|
SEC->>CTRL : 调用业务逻辑
|
||
|
|
CTRL-->>Client : 正常响应
|
||
|
|
Note over SEC,EXC : 若发生未认证/无权限等异常
|
||
|
|
SEC->>EXC : 抛出安全异常
|
||
|
|
EXC-->>Client : 统一错误响应
|
||
|
|
```
|
||
|
|
|
||
|
|
图表来源
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.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)
|
||
|
|
- [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)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
|
||
|
|
## 详细组件分析
|
||
|
|
|
||
|
|
### SecurityConfig主配置类
|
||
|
|
职责与要点:
|
||
|
|
- 构建Spring Security过滤器链:按顺序注册跨域、认证、授权、异常处理等过滤器。
|
||
|
|
- 自定义过滤器注入:将JwtAuthenticationFilter加入过滤器链,并在适当位置进行认证前置或后置处理。
|
||
|
|
- URL匹配规则:结合Ant风格或正则表达式对路径进行放行或保护;与PermissionConfig协同实现白名单与忽略路径。
|
||
|
|
- 异常处理:注册SecurityExceptionHandlers,将未认证、无权限等异常转为统一响应。
|
||
|
|
- 密码编码器:配置BCryptPasswordEncoder或其他强哈希算法,确保密码存储安全。
|
||
|
|
- Bean注册:暴露必要的Security相关Bean(如认证管理器、授权决策器等),便于扩展。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
classDiagram
|
||
|
|
class SecurityConfig {
|
||
|
|
+configure(HttpSecurity)
|
||
|
|
+registerFilters()
|
||
|
|
+configureAuthorization()
|
||
|
|
+configureExceptionHandling()
|
||
|
|
+passwordEncoder()
|
||
|
|
+securityContext()
|
||
|
|
}
|
||
|
|
class JwtAuthenticationFilter {
|
||
|
|
+doFilterInternal(request,response,filterChain)
|
||
|
|
}
|
||
|
|
class SecurityExceptionHandlers {
|
||
|
|
+handleUnauthorized()
|
||
|
|
+handleForbidden()
|
||
|
|
+handleAccessDenied()
|
||
|
|
}
|
||
|
|
class PasswordEncoder {
|
||
|
|
+encode(password)
|
||
|
|
+matches(raw,password)
|
||
|
|
}
|
||
|
|
SecurityConfig --> JwtAuthenticationFilter : "注册到过滤器链"
|
||
|
|
SecurityConfig --> SecurityExceptionHandlers : "注册异常处理器"
|
||
|
|
SecurityConfig --> PasswordEncoder : "配置密码编码器"
|
||
|
|
```
|
||
|
|
|
||
|
|
图表来源
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
||
|
|
- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java)
|
||
|
|
- [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java)
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
||
|
|
|
||
|
|
### PermissionConfig权限配置
|
||
|
|
职责与要点:
|
||
|
|
- 接口白名单:定义无需鉴权的公开接口集合,常用于登录、健康检查、静态资源等。
|
||
|
|
- 忽略路径:与白名单类似,但可能用于特定场景(如监控、审计)的免鉴权访问。
|
||
|
|
- URL匹配规则:支持Ant风格路径匹配,便于灵活配置不同层级与通配符。
|
||
|
|
- 与SecurityConfig协作:在授权阶段优先判断是否命中白名单或忽略路径,命中则直接放行。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
flowchart TD
|
||
|
|
Start(["进入授权阶段"]) --> CheckWhitelist{"是否命中白名单?"}
|
||
|
|
CheckWhitelist --> |是| Allow["放行请求"]
|
||
|
|
CheckWhitelist --> |否| CheckIgnore{"是否命中忽略路径?"}
|
||
|
|
CheckIgnore --> |是| Allow
|
||
|
|
CheckIgnore --> |否| RequireAuth["需要鉴权"]
|
||
|
|
RequireAuth --> End(["结束"])
|
||
|
|
Allow --> End
|
||
|
|
```
|
||
|
|
|
||
|
|
图表来源
|
||
|
|
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java)
|
||
|
|
|
||
|
|
### CorsConfig跨域配置
|
||
|
|
安全考虑与建议:
|
||
|
|
- 限制允许的源(Origin)为受信任域名,避免使用“*”在生产环境。
|
||
|
|
- 明确允许的HTTP方法与头部,最小化暴露面。
|
||
|
|
- 谨慎启用凭据(AllowCredentials),仅在必要时开启并确保源严格限定。
|
||
|
|
- 与SecurityConfig配合,确保跨域预检请求不被误拦截。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
flowchart TD
|
||
|
|
Preflight["浏览器预检请求"] --> ValidateOrigin{"来源是否受信任?"}
|
||
|
|
ValidateOrigin --> |否| Deny["拒绝跨域"]
|
||
|
|
ValidateOrigin --> |是| CheckMethods{"方法是否允许?"}
|
||
|
|
CheckMethods --> |否| Deny
|
||
|
|
CheckMethods --> |是| CheckHeaders{"头部是否允许?"}
|
||
|
|
CheckHeaders --> |否| Deny
|
||
|
|
CheckHeaders --> |是| Allow["允许跨域"]
|
||
|
|
```
|
||
|
|
|
||
|
|
图表来源
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
|
||
|
|
### AuthProperties认证属性
|
||
|
|
作用与常见字段:
|
||
|
|
- JWT密钥、算法、过期时间、刷新策略等。
|
||
|
|
- 白名单开关、忽略路径列表、默认角色或权限策略。
|
||
|
|
- 通过外部化配置(application.yml)注入,便于不同环境差异化配置。
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java)
|
||
|
|
- [application.yml](file://crm-auth/src/main/resources/application.yml)
|
||
|
|
- [application.yml](file://crm-app/src/main/resources/application.yml)
|
||
|
|
|
||
|
|
### 自定义过滤器与异常处理
|
||
|
|
- JwtAuthenticationFilter:从请求头提取JWT,调用TokenService校验,成功后填充认证上下文供后续鉴权使用。
|
||
|
|
- SecurityExceptionHandlers:捕获未认证、无权限等异常,输出统一错误码与消息,便于前端处理。
|
||
|
|
- GlobalExceptionHandlerAdvice:统一业务异常与系统异常,保证响应一致性。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
sequenceDiagram
|
||
|
|
participant Filter as "JwtAuthenticationFilter"
|
||
|
|
participant Token as "TokenService"
|
||
|
|
participant SecEx as "SecurityExceptionHandlers"
|
||
|
|
participant GlobalEx as "GlobalExceptionHandlerAdvice"
|
||
|
|
Filter->>Token : 校验JWT
|
||
|
|
Token-->>Filter : 成功/失败
|
||
|
|
alt 失败
|
||
|
|
Filter->>SecEx : 抛出未认证/无效令牌异常
|
||
|
|
SecEx-->>GlobalEx : 统一异常转换
|
||
|
|
GlobalEx-->>Client : 标准错误响应
|
||
|
|
else 成功
|
||
|
|
Filter-->>Next : 继续过滤器链
|
||
|
|
end
|
||
|
|
```
|
||
|
|
|
||
|
|
图表来源
|
||
|
|
- [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)
|
||
|
|
- [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)
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [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)
|
||
|
|
- [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)
|
||
|
|
|
||
|
|
## 依赖关系分析
|
||
|
|
- SecurityConfig依赖JwtAuthenticationFilter、SecurityExceptionHandlers、PasswordEncoder与PermissionConfig。
|
||
|
|
- JwtAuthenticationFilter依赖TokenService进行令牌校验。
|
||
|
|
- CorsConfig独立于安全过滤器链,但在请求早期进行跨域处理。
|
||
|
|
- GlobalExceptionHandlerAdvice作为全局异常处理,接收来自安全与业务层的异常。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
graph LR
|
||
|
|
SC["SecurityConfig"] --> JF["JwtAuthenticationFilter"]
|
||
|
|
SC --> SEH["SecurityExceptionHandlers"]
|
||
|
|
SC --> PE["PasswordEncoder"]
|
||
|
|
SC --> PC["PermissionConfig"]
|
||
|
|
JF --> TS["TokenService"]
|
||
|
|
CC["CorsConfig"] --> SC
|
||
|
|
SEH --> GHA["GlobalExceptionHandlerAdvice"]
|
||
|
|
```
|
||
|
|
|
||
|
|
图表来源
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.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)
|
||
|
|
- [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java)
|
||
|
|
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.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)
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java)
|
||
|
|
- [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.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)
|
||
|
|
- [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)
|
||
|
|
|
||
|
|
## 性能考虑
|
||
|
|
- 过滤器链尽量精简,避免在认证前执行重型逻辑。
|
||
|
|
- 令牌校验应缓存热点信息(如用户会话、角色),减少重复计算。
|
||
|
|
- 跨域预检请求需快速返回,避免阻塞。
|
||
|
|
- 白名单与忽略路径匹配建议使用高效数据结构(如Set或Trie)。
|
||
|
|
- 密码编码选择合适强度,平衡安全性与性能。
|
||
|
|
|
||
|
|
[本节为通用指导,不直接分析具体文件]
|
||
|
|
|
||
|
|
## 故障排查指南
|
||
|
|
常见问题与定位步骤:
|
||
|
|
- 401未认证:检查JwtAuthenticationFilter是否正确读取请求头、TokenService是否有效、白名单是否遗漏。
|
||
|
|
- 403无权限:确认PermissionConfig白名单与忽略路径配置、授权规则是否覆盖该接口。
|
||
|
|
- 跨域失败:核对CorsConfig的源、方法与头部配置,确保生产环境不使用“*”。
|
||
|
|
- 密码校验失败:确认PasswordEncoder配置与用户密码存储格式一致。
|
||
|
|
- 异常响应不一致:检查SecurityExceptionHandlers与GlobalExceptionHandlerAdvice的映射关系。
|
||
|
|
|
||
|
|
章节来源
|
||
|
|
- [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)
|
||
|
|
- [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)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
|
||
|
|
## 结论
|
||
|
|
通过SecurityConfig、PermissionConfig、JwtAuthenticationFilter、TokenService与CorsConfig的协同,CRM系统实现了完整的认证、授权与跨域安全能力。合理配置白名单、忽略路径与跨域策略,结合统一的异常处理与密码编码器,可显著提升系统的安全性与可维护性。
|
||
|
|
|
||
|
|
[本节为总结,不直接分析具体文件]
|
||
|
|
|
||
|
|
## 附录
|
||
|
|
- 配置文件示例(application.yml)建议:
|
||
|
|
- 认证相关:JWT密钥、算法、过期时间、刷新策略、白名单开关、忽略路径列表。
|
||
|
|
- 跨域相关:允许的源、方法、头部、是否允许凭据。
|
||
|
|
- 安全相关:密码编码器类型、默认角色与权限策略。
|
||
|
|
- 安全最佳实践:
|
||
|
|
- 生产环境禁用调试端点与敏感接口。
|
||
|
|
- 严格限定跨域源与方法,避免使用“*”。
|
||
|
|
- 定期轮换JWT密钥与加密参数。
|
||
|
|
- 对敏感接口增加二次校验与限流。
|
||
|
|
- 统一异常响应格式,避免泄露内部细节。
|
||
|
|
|
||
|
|
[本节为补充内容,不直接分析具体文件]
|