Skip to content

Java 安全与鉴权

请求链路

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

Token payload 含 userId不存 permissions;每次请求从 DB 重新加载权限码。

SecurityConfig 白名单

无需登录(permitAll):

路径说明
GET /api/v1/health健康检查
POST /api/v1/auth/login登录
POST /api/v1/auth/refresh刷新 Token
POST /api/v1/system/database/init数据库初始化(生产应关闭开关)
GET /api/v1/system/files/download/**文件下载(匿名访问)
/api-docs/**/swagger-ui/**/swagger-ui.htmlOpenAPI 文档
GET /actuator/healthActuator 健康
OPTIONS /**CORS 预检

其余接口:authenticated()/actuator/**(除 health 外)需登录。

实现:common/config/SecurityConfig.java

@PreAuthorize 权限码

System 与 Monitor 模块在 Controller 方法上使用 @PreAuthorize("hasAuthority('...')")

System 示例

端点权限
GET /api/v1/system/userssystem:user:list
POST /api/v1/system/userssystem:user:create
GET /api/v1/system/users/exportsystem:user:export
POST /api/v1/system/users/importsystem:user:import
GET /api/v1/system/rolessystem:role:list
PUT /api/v1/system/roles/{id}/permissionssystem:role:update
GET /api/v1/system/permissionssystem:permission:list
GET /api/v1/system/menussystem:menu:list
GET /api/v1/system/deptssystem:dept:list
GET /api/v1/system/dict/typessystem:dict:list
GET /api/v1/system/configssystem:config:list
POST /api/v1/system/files/uploadsystem:file:upload

完整端点列表见 System 平台管理

Monitor 示例

端点权限
GET /api/v1/monitor/operlogsmonitor:operlog:list
DELETE /api/v1/monitor/operlogs/{id}monitor:operlog:delete
GET /api/v1/monitor/logininformonitor:logininfor:list
GET /api/v1/monitor/jobsmonitor:job:list
POST /api/v1/monitor/jobs/{id}/runmonitor:job:update

详见 Monitor 监控

Auth 接口

以下仅需 登录,无细粒度 system:* / monitor:* 权限:

  • POST /api/v1/auth/logout
  • GET /api/v1/auth/me
  • GET/PUT /api/v1/auth/profile
  • POST /api/v1/auth/change-password

401 / 403

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

JWT 说明

  • access / refresh 两种 type,API 请求只用 access
  • access 默认 1 小时,refresh 默认 7 天(见 application.yml
  • 前端 api-client 在 401 时用 refresh 换新 access

数据权限

DataScopeService 按角色 data_scope 过滤用户列表等数据:

含义
1全部数据
2自定义(角色绑定部门)
3本部门
4本部门及以下
5仅本人

关键类

路径
SecurityConfigcommon/config/SecurityConfig.java
JwtAuthenticationFiltercommon/security/JwtAuthenticationFilter.java
CustomUserDetailsServiceauth/service/CustomUserDetailsService.java
DataScopeServicesystem/service/DataScopeService.java

相关文档

Xichen Full Stack 内部文档