一,shiro 框架简介
apache shiro 是一个 java 安全框架,用于提供程序中的身份认证,授权控制,会话管理,加密管理等功能,常用于后台管理系统,cms 系统
二,整体架构
核心组件图:
Subject | SecurityManager |
| | |Authenticator Authorizer SessionManager | | | Realm Realm SessionDAO
1.subject
当前用户对象,代表用户身份
Subject subject = SecurityUtils.getSubject();
职责:
1.登录
subject.login(token)
2.判断认证状态
subject.isAuthenticated()
3.获取用户身份
subject.getPrincipal();
principal 表示用户信息:
newSimpleAuthenticationInfo( principal, credentials, realm )
4.权限判断
subjec.hasRole()
subject.isPermitted()
2.securitymanager
框架的核心管理者,大管家,负责协调认证、授权、会话
3.realm
realm 是框架于业务直接按的数据桥梁,类似 mybatis 中 userMapper 与数据库之间的关系
框架通过 realm 来查询数据库中的信息,例如登录时需要拿到数据库中用户信息来进行比对
shiro--->realm---->数据库
使用场景及示例:
登录认证时:
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationTokentoken)
用户输入用户名密码,realm 查询数据库返回用户信息 AuthenticationInfo,框架拿到数据进行密码校验
授权时:
doGetAuthorizationInfo()
通过数据库查询角色的权限相关信息
4.authenication 认证模块
认证流程:
Controller
↓
subject.login(token)
↓
DelegatingSubject
↓
SecurityManager
↓
Authenticator
↓
Realm
↓
doGetAuthenticationInfo()
↓
数据库查询
↓
AuthenticationInfo
↓
密码校验
↓
认证成功AuthenticationToken
token保存用户输入。
UsernamePasswordTokenSimpleAuthenticationInfo
Realm返回:
new SimpleAuthenticationInfo( principal, credentials, realmName)principal:
用户身份
credentials:
密码信息
5.Authorization授权模块
认证判断你是谁,授权决定你能做什么
- Role角色模型
Role表示身份。
subject.hasRole(“admin”) 2.Permission权限模型
Permission表示具体操作。
例如:
user
user
article
判断:
subject.isPermitted(
“user
常见:
角色
@RequiresRoles(“admin”)
权限
@RequiresPermissions(“user
6.Shiro Filter
Filter负责:
请求入口控制
配置:
ShiroFilterFactoryBean
核心:
filterChainDefinitionMap 8.2 常见过滤器 过滤器 作用 anon 匿名访问 authc 必须认证 logout 退出登录 roles 角色控制 perms 权限控制
例如:
map.put( “/login”, “anon” );
map.put( “/admin/**”, “authc” );
login无需认证
admin需要登录