您的位置:首页 >Java权限控制实现与项目解析
发布于2026-03-02 阅读(0)
扫一扫,手机访问
Spring Security 基础权限校验最省事:用 http.authorizeHttpRequests() 配置路径权限,@PreAuthorize 控制方法级权限,统一用 Permission 枚举管理权限标识,JWT 场景需将权限写入 token payload 并自定义 JwtAuthenticationConverter。

直接上手 Spring Security 是 Java Web 项目里最稳妥的选择,它不强制你写一堆 if-else 判断角色,而是把权限逻辑下沉到配置和注解层。如果你只是想控制“管理员能删、普通用户只能查”,没必要自己造 PermissionService 轮子。
关键点在于:别手动在 Controller 里调 getUserRoles() 再做字符串匹配,那是反模式。
@EnableWebSecurity 和 @Configuration 类http.authorizeHttpRequests() 配置路径级权限,比如 requestMatchers("/api/users/delete").hasRole("ADMIN")@PreAuthorize("hasRole('ADMIN')") 或 @PreAuthorize("hasAuthority('user:delete')"),注意 hasRole() 会自动补前缀 ROLE_,而 hasAuthority() 不会UserDetails 实现类的 getAuthorities() 返回的是带正确前缀的 GrantedAuthority 对象,不是纯字符串列表Spring Security 默认不支持像 @PreAuthorize("@permissionService.hasPermission(authentication, 'order:refund')") 这种调用自定义服务的写法,除非你显式替换表达式处理器。
否则你会看到 SpelEvaluationException: EL1008E: Property or field 'permissionService' cannot be found。
@Bean 注册一个 DefaultWebSecurityExpressionHandler 实例setPermissionEvaluator() 绑定你自己的 PermissionEvaluator 实现PermissionEvaluator 的 hasPermission() 方法里,可安全注入 Authentication、目标对象、权限标识符,做数据库查询或缓存判断@EnableGlobalMethodSecurity 中开启 prePostEnabled = true(Spring Boot 2.7+ 改为 @EnableMethodSecurity)把 "user:read"、"order:write" 散落在代码各处,后期改权限名或加新资源时极易漏改。应该收口成常量或枚举。
更糟的是有人用数字码(如 101 表示用户查看),完全丧失可读性。
Permission 枚举,每个值含 code(如 USER_READ)、value(如 "user:read")、desc@PreAuthorize("hasAuthority(T(com.example.auth.Permission).USER_READ.value)")value,保持前后端权限标识一致sys_permission 的 code 字段建议与枚举名对齐,方便运维查表@PreAuthorize("hasAuthority(T(com.example.auth.Permission).ORDER_REFUND.value)")
public ResponseEntity<RefundResult> refundOrder(@PathVariable Long orderId) {
// ...
}
如果用了 JWT 且不做 session + Redis 存权限,又没把角色或权限列表放进 token,每次请求都得查库——那跟没用 JWT 没区别,还多了签名开销。
常见错误是只存了 userId,然后在拦截器里再查 DB 加载权限,这既破坏无状态,又拖慢响应。
GrantedAuthority(即权限字符串),放入 JWT 的 authorities 自定义 claimJwtAuthenticationConverter,重写 convert() 方法,从 authorities claim 提取并转成 SimpleGrantedAuthority 列表user:read:123 这种带 ID 的),否则 token 膨胀快上一篇:夸克内存占用高?优化技巧全解析
下一篇:C++克隆实现原型设计模式详解
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9