Skip to content

micro-java 安全与鉴权

micro-java 的认证授权逻辑集中在 xichen-common,由 auth-servicesystem-service 共同 @Import,与单体 server-javacommon.security语义对齐

请求链路

text
HTTP Request(经 Gateway 转发)
  → JwtAuthenticationFilter(解析 Bearer access Token)
  → CustomUserDetailsService(加载 permissions → GrantedAuthority)
  → SecurityContext
  → @PreAuthorize("hasAuthority('...')")

Gateway 不参与 JWT 校验,Token 在下游服务验证。

SecurityConfig 白名单

无需登录:

路径说明
/api/v1/health健康检查
/api/v1/auth/login登录
/api/v1/auth/refresh刷新 Token
/api-docs/**/swagger-ui/**各服务 Swagger

其余路径:authenticated()

Auth 接口(logoutmechange-password)仅需登录,无细粒度 permission。

权限码

System 模块与契约一致,例如:

端点权限
GET /system/userssystem:user:list
POST /system/userssystem:user:create
GET /system/permissionssystem:role:list

完整列表见 单体 Java 安全文档

JWT 跨服务要求

auth-service 签发 Token,system-service 校验 Token。两边 JWT_SECRET 必须相同(默认读取 app.jwt.secret / 环境变量 JWT_SECRET)。

Token payload 含 userId,权限不落 Token,每次请求从 DB 加载。

401 / 403

Handler场景
JsonAuthenticationEntryPoint未登录或 Token 无效
JsonAccessDeniedHandler已登录但 @PreAuthorize 不满足

响应格式与全仓统一:{ code, message, data }

关键源码

路径
SecurityConfigxichen-common/.../config/SecurityConfig.java
JwtAuthenticationFilterxichen-common/.../security/JwtAuthenticationFilter.java
JwtTokenProviderxichen-common/.../security/JwtTokenProvider.java
AuthControllerauth-service/.../controller/AuthController.java
System*Controllersystem-service/.../controller/

相关文档

Xichen Full Stack 内部文档