Appearance
Java 安全与鉴权
请求链路
text
HTTP Request
→ JwtAuthenticationFilter(解析 Bearer access Token)
→ CustomUserDetailsService(加载 permissions → GrantedAuthority)
→ SecurityContext
→ @PreAuthorize("hasAuthority('...')")SecurityConfig 白名单
无需登录:
/api/v1/health/api/v1/auth/login/api/v1/auth/refresh- Swagger 相关路径
其余:authenticated()。
@PreAuthorize 权限码
System 模块 20 个端点,12 个唯一权限码,例如:
| 端点 | 权限 |
|---|---|
| GET /system/users | system:user:list |
| POST /system/users | system:user:create |
| GET /system/permissions | system:role:list |
Auth 接口(logout、me、change-password)仅需登录,无细粒度 permission。
401 / 403
| Handler | message |
|---|---|
| JsonAuthenticationEntryPoint | 未登录或登录已失效 |
| JsonAccessDeniedHandler | 没有访问权限 |
JWT 说明
- access / refresh 两种 type,API 只用 access
- Token payload 含 userId,不存 permissions
- 每次请求从 DB 重新加载权限
关键类
| 类 | 路径 |
|---|---|
| SecurityConfig | common/config/SecurityConfig.java |
| JwtAuthenticationFilter | common/security/ |
| CustomUserDetailsService | auth/service/ |