# 安全考虑 **本文引用的文件** - [AuthApplication.java](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java) - [AdminApplication.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java) - [SaTokenConfigure.java](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java) - [Constant.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java) - [UserDTO.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/UserDTO.java) - [LdapUserDTO.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/LdapUserDTO.java) - [SRMTokenDTO.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SRMTokenDTO.java) - [LdapConfig.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java) - [SAPConfig.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java) - [CorsWebFilter.java](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java) - [RedisConfig.java](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java) - [NflgException.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java) ## 目录 1. [引言](#引言) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 引言 本文件面向NFLG WMS系统的安全管理员与开发人员,系统性梳理身份认证与授权、数据安全、网络安全、审计与合规、API安全防护、第三方系统集成安全以及安全运维与应急响应等关键主题。文档以仓库中实际存在的模块与配置为依据,结合可观察到的实现线索,提出可落地的安全建议与最佳实践。 ## 项目结构 WMS系统采用多模块分层设计,围绕“认证中心”“网关”“业务子域”“通用能力”展开。认证与授权由Sa-Token在统一SSO模式下实现;网关负责跨域与基础过滤;业务模块通过starter提供的通用能力(如Redis、Jackson)进行会话与序列化;与SAP、LDAP等外部系统通过独立配置类接入。 ```mermaid graph TB subgraph "认证与发现" AUTH["认证应用
AuthApplication.java"] ST_SA_TOKEN["Sa-Token配置
SaTokenConfigure.java"] end subgraph "网关与过滤" GW_CORS["CORS过滤器
CorsWebFilter.java"] end subgraph "业务与通用" ADMIN_APP["管理端应用
AdminApplication.java"] COMMON["通用常量与异常
Constant.java / NflgException.java"] DTO_USERS["用户与LDAP模型
UserDTO.java / LdapUserDTO.java"] DTO_SRM["SRM令牌模型
SRMTokenDTO.java"] REDIS["Redis配置
RedisConfig.java"] end subgraph "第三方集成" LDAP_CFG["LDAP配置
LdapConfig.java"] SAP_CFG["SAP配置
SAPConfig.java"] end AUTH --> ST_SA_TOKEN ADMIN_APP --> GW_CORS ADMIN_APP --> REDIS ADMIN_APP --> COMMON ADMIN_APP --> DTO_USERS ADMIN_APP --> LDAP_CFG ADMIN_APP --> SAP_CFG AUTH --> GW_CORS ``` 图表来源 - [AuthApplication.java:1-24](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L1-L24) - [AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27) - [SaTokenConfigure.java:1-16](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java#L1-L16) - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [Constant.java:1-43](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L1-L43) - [NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18) - [UserDTO.java:1-90](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/UserDTO.java#L1-L90) - [LdapUserDTO.java:1-28](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/LdapUserDTO.java#L1-L28) - [SRMTokenDTO.java:1-11](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SRMTokenDTO.java#L1-L11) - [LdapConfig.java:1-43](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java#L1-L43) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) 章节来源 - [AuthApplication.java:1-24](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L1-L24) - [AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27) - [SaTokenConfigure.java:1-16](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java#L1-L16) - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [Constant.java:1-43](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L1-L43) - [NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18) - [UserDTO.java:1-90](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/UserDTO.java#L1-L90) - [LdapUserDTO.java:1-28](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/LdapUserDTO.java#L1-L28) - [SRMTokenDTO.java:1-11](file://nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SRMTokenDTO.java#L1-L11) - [LdapConfig.java:1-43](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java#L1-L43) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) ## 核心组件 - 统一认证中心与SSO客户端 - 认证中心应用通过组件扫描引入认证与通用模块,并启用服务发现与SSO管理器日志输出。 - 管理端应用同样启用服务发现与SSO客户端配置,便于前后端统一认证。 - 基于JWT的会话与权限 - 通过Sa-Token配置使用JWT逻辑实现,简化分布式场景下的会话状态管理。 - 跨域与基础过滤 - 网关层提供CORS过滤器,允许常见方法与头部,支持预检请求快速返回。 - 会话与缓存 - Redis配置提供对象与字符串模板,用于存储会话、令牌与临时数据。 - 第三方系统集成 - LDAP配置注入DN与密码,供目录服务对接。 - SAP配置集中管理连接参数与连接池校验,避免文件IO,直接注册到JCo环境。 章节来源 - [AuthApplication.java:1-24](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L1-L24) - [AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27) - [SaTokenConfigure.java:1-16](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java#L1-L16) - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [LdapConfig.java:1-43](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java#L1-L43) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) ## 架构总览 下图展示认证、网关、业务与第三方系统之间的交互关系,以及会话与权限的关键路径。 ```mermaid sequenceDiagram participant Browser as "浏览器" participant Gateway as "网关CORS过滤器" participant Admin as "管理端应用" participant Auth as "认证中心应用" participant SaToken as "Sa-Token JWT" participant Redis as "Redis缓存" Browser->>Gateway : "HTTP 请求含跨域头" Gateway->>Gateway : "添加CORS响应头/OPTIONS预检处理" Gateway-->>Browser : "允许跨域响应" Browser->>Admin : "携带认证头访问业务接口" Admin->>SaToken : "解析JWT并校验" SaToken->>Redis : "查询会话/权限信息" Redis-->>SaToken : "返回会话数据" SaToken-->>Admin : "鉴权通过/拒绝" Admin-->>Browser : "业务响应" Note over Auth,SaToken : "认证中心负责签发与SSO管理" ``` 图表来源 - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) - [AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27) - [AuthApplication.java:1-24](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L1-L24) - [SaTokenConfigure.java:1-16](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java#L1-L16) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) ## 详细组件分析 ### 身份认证与授权机制 - 基于Token的认证 - 使用Sa-Token的JWT逻辑,简化分布式会话与SSO。 - 管理端与认证中心均启用服务发现与SSO客户端/服务端配置,确保统一认证入口。 - 权限控制与会话管理 - 会话与权限数据通过Redis存储,便于横向扩展与共享。 - 建议结合业务角色与资源授权策略,配合统一异常处理与审计日志实现细粒度权限控制。 - 登录扩展信息 - 常量定义了登录扩展字段键名,可用于传递用户姓名、工号、邮箱、部门、角色、类型等上下文信息。 ```mermaid classDiagram class SaTokenConfigure { +getStpLogicJwt() StpLogic } class AuthApplication { +main(args) } class AdminApplication { +main(args) } class RedisConfig { +redisObjectTemplate() +redisStringTemplate() } class Constant { +LOGIN_EXTRA_* 常量 } AuthApplication --> SaTokenConfigure : "使用JWT逻辑" AdminApplication --> SaTokenConfigure : "使用JWT逻辑" AdminApplication --> RedisConfig : "会话/权限存储" SaTokenConfigure --> RedisConfig : "依赖Redis" Constant <.. AdminApplication : "登录扩展键名" ``` 图表来源 - [SaTokenConfigure.java:1-16](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java#L1-L16) - [AuthApplication.java:1-24](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L1-L24) - [AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [Constant.java:1-43](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L1-L43) 章节来源 - [SaTokenConfigure.java:1-16](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java#L1-L16) - [AuthApplication.java:1-24](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L1-L24) - [AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [Constant.java:1-43](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L1-L43) ### 数据安全保护 - 传输安全 - 建议在生产环境强制HTTPS与TLS 1.2+,并在网关层统一终止TLS,确保内部服务间通信安全。 - 存储安全 - Redis作为会话与缓存介质,需启用网络隔离、只监听内网、设置访问密码与最小权限ACL。 - 对敏感字段(如用户密码、令牌)仅在必要时落盘或临时缓存,避免明文持久化。 - 数据加密 - 建议对静态数据(如日志中的敏感字段)进行脱敏与加密存储;对传输中的令牌与凭证使用TLS保护。 章节来源 - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) ### 网络安全防护 - 跨域与预检 - CORS过滤器允许常见方法与常用头部,预检请求直接返回200,减少前端复杂度。 - 建议在生产环境限定具体来源域名,避免通配符。 - 防火墙与边界 - 网关对外暴露,内部服务通过内网访问;对认证中心与数据库、SAP、LDAP等敏感后端实施最小权限网络策略。 - DDoS与入侵检测 - 建议在网关层部署速率限制、IP黑白名单与WAF;结合云厂商DDoS清洗与入侵检测系统(IDS)联动。 章节来源 - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) ### 审计日志与合规 - 操作日志与审计追踪 - 建议在统一异常处理与业务切面中记录关键操作(登录、权限变更、高风险操作),包含用户标识、时间戳、IP、操作内容与结果。 - 数据隐私保护 - 对个人数据与敏感字段进行脱敏显示与最小化采集;遵循数据生命周期管理,定期清理过期数据。 - 合规要求 - 建立数据分类分级与访问审批流程;保留审计日志至少满足法规要求的最短期限。 章节来源 - [NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18) ### API安全防护方案 - 请求签名与完整性 - 建议在网关层引入API签名(如HMAC-SHA256),结合nonce与timestamp防重放。 - 频率限制 - 在网关或业务层按IP/用户维度实施限流,阻断异常流量。 - 防重放攻击 - 引入一次性nonce与滑动窗口时间窗,服务端缓存已使用nonce并设置TTL。 - 令牌治理 - 缩短刷新令牌有效期、启用旋转机制;对失效令牌与异常行为触发即时撤销。 章节来源 - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) ### 第三方系统集成安全 - LDAP集成 - LDAP配置注入DN与密码,建议: - 使用只读账户执行查询; - 开启TLS连接; - 严格限制查询范围与属性; - 对用户输入进行白名单校验。 - SAP集成 - SAP配置集中管理连接参数与连接池校验,建议: - 仅在内存中注册目的地,避免文件IO泄露; - 校验峰值与池容量关系,防止资源耗尽; - 限制调用方权限与RFC调用范围; - 对SAP侧的错误与异常进行降级与告警。 ```mermaid flowchart TD Start(["初始化SAP连接"]) --> Validate["校验峰值与池容量关系"] Validate --> Valid{"配置有效?"} Valid --> |否| RaiseErr["抛出非法参数异常"] Valid --> |是| Register["注册目的地到JCo环境"] Register --> Done(["可用的JCoDestination"]) RaiseErr --> End(["结束"]) Done --> End ``` 图表来源 - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) 章节来源 - [LdapConfig.java:1-43](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java#L1-L43) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) ### 安全漏洞评估与修复流程 - 评估 - 定期进行依赖扫描、容器镜像扫描与源码安全扫描;对认证、授权、数据与网络层面进行渗透测试。 - 修复 - 建立补丁发布流程与回滚预案;对高危漏洞在72小时内发布修复版本。 - 监控 - 结合日志与指标建立异常告警,覆盖认证失败、权限异常、SAP/LDAP连接异常等。 章节来源 - [NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18) ### 安全监控与应急响应 - 监控 - 关键指标:认证失败率、会话异常增长、Redis连接数、SAP/LDAP超时与错误率。 - 应急响应 - 触发条件:大规模认证失败、会话风暴、第三方系统不可用、审计日志异常激增。 - 处置步骤:隔离问题模块、降级非关键功能、回滚可疑变更、通知安全部门与合规团队。 章节来源 - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) - [LdapConfig.java:1-43](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java#L1-L43) ## 依赖分析 - 组件耦合 - 管理端应用依赖Sa-Token与Redis配置;认证中心负责统一签发与SSO;网关提供跨域与基础过滤。 - 外部依赖 - SAP与LDAP通过独立配置类接入,降低耦合度;建议在运行时对这些连接进行健康检查与熔断。 ```mermaid graph LR Admin["管理端应用"] --> SaToken["Sa-Token配置"] Admin --> Redis["Redis配置"] Admin --> LDAP["LDAP配置"] Admin --> SAP["SAP配置"] Auth["认证中心应用"] --> SaToken Gateway["网关CORS"] --> Admin ``` 图表来源 - [AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27) - [AuthApplication.java:1-24](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L1-L24) - [SaTokenConfigure.java:1-16](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java#L1-L16) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [LdapConfig.java:1-43](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java#L1-L43) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) 章节来源 - [AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27) - [AuthApplication.java:1-24](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L1-L24) - [SaTokenConfigure.java:1-16](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/SaTokenConfigure.java#L1-L16) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [LdapConfig.java:1-43](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java#L1-L43) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) ## 性能考虑 - 会话与缓存 - Redis模板已配置序列化策略,建议根据热点数据调整TTL与淘汰策略,避免内存压力。 - 认证与授权 - JWT解码与Redis查询应尽量本地化与缓存,减少跨实例查询开销。 - 第三方系统 - SAP连接池参数需与业务峰值匹配,避免频繁创建销毁连接;对LDAP查询结果进行分页与索引优化。 章节来源 - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) ## 故障排查指南 - 认证失败 - 检查JWT是否过期、Redis会话是否被清理、SSO配置是否一致。 - 跨域问题 - 确认CORS响应头是否正确下发,预检请求是否被提前拦截。 - Redis异常 - 检查连接数、内存占用与序列化异常;确认模板键值序列化策略一致。 - SAP/LDAP连接异常 - 校验连接参数与池容量配置,查看初始化日志与异常堆栈。 章节来源 - [NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18) - [SAPConfig.java:1-120](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/SAPConfig.java#L1-L120) - [LdapConfig.java:1-43](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/LdapConfig.java#L1-L43) - [CorsWebFilter.java:1-33](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/config/CorsWebFilter.java#L1-L33) - [RedisConfig.java:1-50](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java#L1-L50) ## 结论 本文件基于仓库现有实现,总结了WMS系统的认证授权、数据与网络安全、审计与合规、API防护、第三方集成与运维应急等方面的安全要点。建议在生产环境中补充TLS、限流、签名与防重放、敏感数据脱敏与加密、严格的第三方访问控制与健康检查,以形成闭环的安全体系。 ## 附录 - 安全最佳实践清单 - 强制HTTPS与TLS 1.2+;启用CORS白名单;部署WAF与DDoS防护。 - 会话令牌最小权限与短有效期;Redis启用密码与网络隔离。 - 对SAP/LDAP使用只读账户与最小权限;连接池参数与健康检查。 - 审计日志与数据脱敏;异常告警与应急响应流程。 - 合规性检查清单 - 数据分类分级与最小化采集;日志保留期限与可追溯性;第三方供应商安全评估与合同约束。