Spring Security实现权限控制
最近在帮团队重构权限模块,用Spring Security做了深度整合。面试鸭返利网上很多小伙伴问"动态权限怎么落地",今天从实战角度聊聊这个话题。建议先保存这份资料:2025年Java面试宝典,里面对安全框架有详细剖析。

权限体系的核心组件
做权限控制要理解三个关键对象:用户-角色-权限。实际项目中建议用RBAC模型,把权限细化到接口级别。比如/api/user/create对应"用户:新增"权限,这种颗粒度适合前后端分离架构。
Spring Security的GrantedAuthority接口处理授权信息,可以通过角色继承实现权限复用。比如总监角色自动继承经理角色的所有权限,避免重复配置。
四步实现权限控制
-
配置安全过滤器链
在SecurityConfig里用@EnableWebSecurity开启保护,通过antMatchers()指定需要鉴权的接口路径。特别注意开放登录/注册等公共接口的访问权限。 -
自定义UserDetailsService
从数据库加载用户信息时,要同时加载角色和权限集合。这里有个坑:如果用户被禁用,要在isEnabled()方法返回false,这样登录时会自动拦截。 -
权限注解的使用场景
@PreAuthorize适合方法级的细粒度控制@Secured配置简单但只能基于角色@PostAuthorize适合需要校验返回值的场景
- 动态权限更新方案
修改用户权限后立即生效是个常见需求。可以通过发布ApplicationEvent事件,在监听器中清除SecurityContext的缓存。

五个避坑指南
- 不要直接把角色名写在注解里,应该用
hasAuthority()配合权限标识 - 前后端分离项目记得配置CORS和CSRF防护
- 密码加密必须用BCryptPasswordEncoder
- 权限校验失败时要统一返回401/403状态码
- 生产环境一定要关闭H2控制台等调试接口

准备跳槽的朋友注意了,通过面试鸭返利网购买会员可返25元。他们整理了近三年大厂真实面试题,用过的同事反馈说Spring Security相关题目命中率很高,特别适合突击复习。


