Shiro简介
Shiro是java的一个安全框架,主要用于完成认证,加密,会话管理,Web集成,缓存等。
Shiro三大核心对象
Subject
主体,代表当前操作用户对象
SecurityManager
安全管理器,管理所有的subject对象,用于安全交互,是Shiro的执行者
Realm
域,Shiro从Realm中获取安全数据(角色,用户,权限),是Shiro的安全数据源
代码测试
public class ShiroTest {
Subject subject = null;
@Before
public void before(){
//创建shiro的核心对象SecurityManagerg根
DefaultSecurityManager securityManager = new DefaultSecurityManager();
//创建一个读取ini配置文件的Realm
IniRealm iniRealm = new IniRealm("classpath:shiro.ini");
//设置根对象的Realm
securityManager.setRealm(iniRealm);
//把创建好的根对象提供到utils工具类中使用
SecurityUtils.setSecurityManager(securityManager);
}
@Test
public void testShiro(){
//得到subject用户授权对象
subject = SecurityUtils.getSubject();
//该对象用于subject.login调用realm,到配置文件中匹配是否正确
UsernamePasswordToken token =
new UsernamePasswordToken("admin","123");
try {
subject.login(token);
} catch (UnknownAccountException e) {
System.out.println("用户名不存在");
}catch (IncorrectCredentialsException e){
System.out.println("密码不正确");
}
System.out.println("subject.isAuthenticated()::"+subject.isAuthenticated());
System.out.println("subject.getSession()::"+subject.getSession());
System.out.println("subject.getSession().getAttributeKeys()::"+subject.getSession().getAttributeKeys());
System.out.println("subject.getSession().getAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY)::"+subject.getSession().getAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY));
System.out.println("subject.getSession().getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY)::"+subject.getSession().getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY));
System.out.println("subject.getPrincipal()::"+subject.getPrincipal());
}
}
shiro.ini
[users]
admin=123
运行结果
subject.isAuthenticated()::true
subject.getSession()::org.apache.shiro.subject.support.DelegatingSubject$StoppingAwareProxiedSession@2f7c7260
subject.getSession().getAttributeKeys()::[org.apache.shiro.subject.support.DefaultSubjectContext_AUTHENTICATED_SESSION_KEY, org.apache.shiro.subject.support.DefaultSubjectContext_PRINCIPALS_SESSION_KEY]
subject.getSession().getAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY)::true
subject.getSession().getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY)::admin
subject.getPrincipal()::admin