什么是Subject对象
通常我们会将Subject对象理解为一个用户,同样的它也有可能是一个三方程序,它是一个抽象的概念,可以理解为任何与系统交互的“东西”都是Subject。
如何获得Subject对象
首先创建一个初始化文件
shiro.ini
[users]
root=123,admin,person
manage=123,campaign
[roles]
admin=*
person = xiaoming:*
campaign = xiaoming:drive:car
users用户
用户名=密码,角色
roles角色
角色=权限
//1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2、得到SecurityManager实例 并绑定给SecurityUtils
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
//获得当前正在执行的subject
Subject subject = SecurityUtils.getSubject();
获得Subject对象
Subject subject = SecurityUtils.getSubject();
通过SecurityUtils.getSubject()可以获得当前的Subject
得到Subject能干嘛
获得Session对象
Session session = subject.getSession();
session.setAttribute( "someKey", "aValue" );
这里的Session并不是HttpSession,而是shiro为我们提供的,它的操作与HttpSession一样,他们最大的区别就是shiro session不需要依赖http服务器,下图是shiro Session的实现类。
默认情况下shiro Session的实现的是DelegatingSession,我们看一下它默认的setAttribute的实现