shiro权限控制管理框架
一、 作用
- 执行身份验证
- 授权管理
- 密码管理
- 会话管理
二、主要功能
- Subject
当前操作对象;仅意味着跟软件当前的交互对象(并不仅指认) - SecurietyManger
管理所有用户的安全操作;
shiro通过这个组件管理内部组件实例对象,并通过该组件提供安全管理的各种服务 - Realm
是shiro与应用安全数据间的桥梁;是shiro需要从数据库中获取的对比数据的dao层
三、权限控制的两种方式
- URL级别
基于filter实现在数据库中存放用户、权限、访问URL的一一对应关系 - 方法级别
Spring管理:返回对象的代理对象,在访问真实对象每个方法时,查询数据库是否具有注解需要的权限
四、 登陆验证过程
登陆应用程序—> Subject—> SecurietyManger —> Realm —> 安全数据
//获取当前登陆的用户
private static Subject getSubject(User user) {
//加载配置文件,并获取工厂
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//获取安全管理者实例
SecurityManager sm = factory.getInstance();
//将安全管理者放入全局对象
SecurityUtils.setSecurityManager(sm);
//全局对象通过安全管理者生成Subject对象
Subject subject = SecurityUtils.getSubject();
return subject;
}
//是否拥有权限
private static boolean isPermitted(User user,String permit) {
Subject subject = getSubject(user);
return subject.isPermitted(permit);
}
//判断是否登陆
private static boolean login(User user) {
Subject subject = getSubject(user);
//如果已经登陆过,退出
if(subject.isAuthenticated())
subject.logout();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken(user.getName(),user.getPassword());
try{
//将用户的数据token最终传到Ream中对比
subject.login(token);
}catch (AuthenticationException e) {
//验证错误
return false;
}
return subject.isAuthenticated();
}