Skip to content

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/userssystem:user:list
POST /system/userssystem:user:create
GET /system/permissionssystem:role:list

Auth 接口(logout、me、change-password)仅需登录,无细粒度 permission。

401 / 403

Handlermessage
JsonAuthenticationEntryPoint未登录或登录已失效
JsonAccessDeniedHandler没有访问权限

JWT 说明

  • access / refresh 两种 type,API 只用 access
  • Token payload 含 userId,不存 permissions
  • 每次请求从 DB 重新加载权限

关键类

路径
SecurityConfigcommon/config/SecurityConfig.java
JwtAuthenticationFiltercommon/security/
CustomUserDetailsServiceauth/service/

相关文档

Xichen Full Stack 内部文档