spring boot 集成 shiro 实现轻量级权限管理,关键在于用最少配置完成身份认证与细粒度权限控制;推荐使用 shiro-spring-boot-starter 1.11.1 自动装配 bean,配合 rbac 表结构、自定义 realm、shirofilter 规则及注解(如 @requirespermissions)实现快速落地。

Spring Boot 集成 Shiro 实现轻量级权限管理,关键在于用最少的配置达成身份认证(登录)和细粒度权限控制(如接口/页面级拦截),不依赖复杂扩展,适合中小项目快速落地。
引入合适依赖
优先使用 shiro-spring-boot-starter(推荐 1.7.x+),它自动装配大部分 Bean,大幅简化配置:
- 替换旧版
shiro-spring,避免手动注册 Filter、SecurityManager 等易出错环节 - Maven 示例:
<dependency><br><groupid>org.apache.shiro</groupid><br><artifactid>shiro-spring-boot-starter</artifactid><br><version>1.11.1</version><br></dependency>
- 若需分布式会话(如多节点共享登录态),额外引入
spring-boot-starter-data-redis并配置 RedisManager,无需 EhCache
设计符合 RBAC 的基础表结构
按角色-权限模型建三张核心表:用户表、角色表、用户-角色关联表(可选权限-角色表)。字段保持精简:
- user:id、username、password(BCrypt 加密存储)、status(启用/禁用)
-
role:id、role_code(如
ADMIN、USER)、role_name - user_role:user_id、role_id(一对多关系,支持一个用户多个角色)
- 权限(permissions)可直接存在 role 表中(如 JSON 字段存菜单或 API 列表),或单独建表 + role_permission 关联——后者更利于动态授权
自定义 Realm 处理认证与授权
继承 AuthorizingRealm,重写两个核心方法,把数据库查询逻辑注入进去:
-
doGetAuthenticationInfo():根据 username 查询用户,封装SimpleAuthenticationInfo(含密码、盐值、realm 名称) -
doGetAuthorizationInfo():根据用户 ID 查询其所有角色码(role_codes)和权限标识(perms,如user:delete、order:export),封装进SimpleAuthorizationInfo - 密码比对由 Shiro 自动完成(配合
HashedCredentialsMatcher),无需手动校验明文
配置 ShiroFilter 与注解驱动控制
通过 @Bean 注册 ShiroFilterFactoryBean,定义 URL 拦截规则;再开启 AOP 支持,让注解生效:
- 常用路径规则示例:
/login = anon(放行)/logout = logout(自动清 session)/admin/** = authc, roles[ADMIN](需登录且拥有 ADMIN 角色)/api/** = authc, perms[user:list](需登录且有指定权限) - 在启动类或配置类上加
@EnableShiroAnnotations,即可使用:@RequiresAuthentication(已登录)@RequiresRoles("ADMIN")(角色校验)@RequiresPermissions("user:edit")(权限标识校验) - Controller 方法上直接标注,逻辑清晰、无侵入性











