最近在学习Shiro,所以写下这篇文章记录下自己的学习成果,可能在学习过程中存在一些理解性不透彻,或者错误的地方。分享给大家,希望大家给出一些自己理解建议,大家能一起进步。
Shiro的简介:
1、 什么是Shiro?
1、Apache的强大灵活的开源安全架构
2、实现用户认证,授权,企业会话管理,安全加密,缓存管理
2、Shiro整体架构
shiro的整理架构,如图所示:
框架中提供了认证,授权等,解析如下:
1、红色框中,使用的用户,也就是够被嵌入到的语言,框架
2、Authenticator:认证器,管理登录的登入/登出
3、Authorizer:授权器,授予主体有哪些权限
4、Session Manager:Session管理器,自身管理session,可无需借助任何web容器的情况下管理session。
5、Session Dao:提供session的操作,提供增删改查功能
6、Cache Manager:缓存管理器,缓存角色数据和权限数据
7、Pluggable Realms:链接数据库的桥梁,获取角色数据和权限数据等
8、Cryptography:对数据进行加密
3、与Spring Security的对比
Shiro:1、比较简单,灵活 2、可以脱离Spring独立使用 3、粒度比较粗
Spring Security: 1、比较复杂,笨重 2、不可脱离Spring独立使用 3、粒度更细
Shiro认证
1、Shiro认证主要调用的是框架中的Authenticator(认证器),认证步骤分为五步:
一 、创建Security Manager
二、主体提交认证
三、Security Manager认证
四、Authenticator认证
五、Realm验证
如图:
2、代码实现
Test测试类编写
SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
@Beafor
public void addUser(){
simpleAccountRealm.addAccount(username,password);
}
注:username,password编写时用具体的用户名,密码验证
1、创建SecurityManager
DefaultSecurityManager manager = new DefaultSecurityManager();
2、初始化realm
manager.setRealm(simpleAccountRealm);
3、主体提交认证请求
SecurityUtils.setSecurityManager(manager);
(1)、获取主体
Subject subject = SecurityUtils.getSubject();
(2)、获取Token
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
(3)、提交主体
subject.login(token);
(4)、验证主体
subject.isAuthenticated();
Shiro授权
1、shiro授权跟认证差不多,只是使用了授权器(Authorizer),步骤如下:
一、创建SecurityManager
二、主体授权
三、SecurityManager授权
四、Authorizer授权
五、Realm获取角色权限数据
2、代码实现(在认证的基础上添加授权代码)
修改认证代码
1、修改SimpleAccountManager
simpleAccountManager.addAccount(username,password,"admin","root");
password后为权限roles,加粗部门为授权信息,可以用逗号分隔实现多权限配置(admin,root则为设置的权限信息)
2、主体添加checkRoles
subject.checkRoles("admin","root");