Shiro权限管理
Shiro是一款强大灵活的安全框架,可以处理身份认证,授权,加密和会话管理
权限管理概念
一般有用户参与的系统,都需要权限管理,权限管理实现了对用户访问系统的控制
用户认证
用户认证,即用户访问系统时,会被验证用户身份的合法性
用户授权
在用户认证通过后,系统对用户访问资源进行控制,用户拥有资源的权限时,才可以进行访问
权限管理组成
- 主体(账号、密码)
- 权限(权限名称、资源名称、资源访问地址)
- 角色(角色名称)
- 角色和权限的关系(角色id、权限id)
- 主体和角色的关系(主体id、角色id)
分配权限
用户需要分配相应的权限才可以访问相应资源
通常给用户分配资源权限需要将权限信息持久化保存,比如存到关系型数据库
然后实现访问控制
基于角色的访问控制
1
2
3if(user.hasRole("部门经理")){
//
}基于角色的访问控制,不利于代码的维护,扩展性差,因为判断角色的条件都写死在代码中
基于资源的访问控制
1
2
3
4if(user.hasPermission ('用户报表查看(权限标识符)')){
//系统资源内容
//用户报表查看
}资源在系统中不变,建议使用基于资源的访问控制
Shiro架构
- Subject: 当前用户
- SecurityManager: 管理啊所有Subject,SecurityManager是Shiro架构的核心
- Realms: 用户进行权限信息的验证,可以自己实现,它封装了与数据源连接的细节,在配置Shiro的时候,必须指定至少一个Realm来实现认证/授权
Shiro认证过程
- 创建SecurityManager
- Subject提交认证
- SecurityManager认证
- Authenticator认证
- Realm认证
1 | public class AuthenticationTest { |