时隔这么久终于有时间更新了,今天和大家分享一下Shiro的原理。我认为无论是Shiro也好,还是其他安全框架也好,其功能主要就分为三部分:认证、授权、加密。下面我们来详细说明Shiro具体是如何实现的。
Shiro结构图
讲原理当然离不开结构图,我们先来看一下Shiro的整体结构。
由Shiro的结构图我们可以看出Shiro的核心就是Security Manager。Shiro的认证、授权、Session管理,都需要由Security Manager负责。
Shiro认证
下面我们用一个小例子来了解一下Shiro 的简单用法。
public class HelloShiro {
SimpleAccountRealm realm = new SimpleAccountRealm();
@Before
public void addUser() {
realm.addAccount("Mark", "123456");
}
@Test
public void testSimlpeRealm() {
// 1.构建securityManager环境
DefaultSecurityManager securityManager = new DefaultSecurityManager();
securityManager.setRealm(realm);
// 2.主体提交认证请求
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
AuthenticationToken token = new UsernamePasswordToken("Mark", "123456");
// 3. 认证
subject.login(token);
System.out.println(subject.isAuthenticated());
}
}
- 创建securityManager环境,我们这里使用的是DefaultSecurityManager。
- 设置Realm,Realm主要主要负责Subject的认证和授权。其中最重要的两个方法是
doGetAuthenticationInfo
和doGetAuthorizationInfo
,这也是我们整个权限管理的最重要的一部分,由于这里我们只是一个入门程序,我们就使用Shiro定义好的SimpleAccountRealm
作为演示,后面我们还会说到JdbcRealm和自定义Realm。 - 通过
SecurityUtils
设置securityManager和获取subject; - 创建需要认证的token信息,这是我们自己创建一个
UsernamePasswordToken
来模拟获取用户从前台登陆的账号密码。 - 最后我们使用
subject.login(token);
进行认证。若tonken中的账号密码和我们addUser()
添加的相同则测试通过,否则则会抛出异常。
Shiro认证我们先说这么多,下节我们来说说Shiro的简单授权。如果大家有好的意见和建议请在评论区留言,谢谢大家。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。