1

Shiro Logo

时隔这么久终于有时间更新了,今天和大家分享一下Shiro的原理。我认为无论是Shiro也好,还是其他安全框架也好,其功能主要就分为三部分:认证、授权、加密。下面我们来详细说明Shiro具体是如何实现的。

Shiro结构图

讲原理当然离不开结构图,我们先来看一下Shiro的整体结构。

Shiro Theory

由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());

    }
}
  1. 创建securityManager环境,我们这里使用的是DefaultSecurityManager。
  2. 设置Realm,Realm主要主要负责Subject的认证和授权。其中最重要的两个方法是doGetAuthenticationInfodoGetAuthorizationInfo,这也是我们整个权限管理的最重要的一部分,由于这里我们只是一个入门程序,我们就使用Shiro定义好的SimpleAccountRealm作为演示,后面我们还会说到JdbcRealm和自定义Realm。
  3. 通过SecurityUtils设置securityManager和获取subject;
  4. 创建需要认证的token信息,这是我们自己创建一个UsernamePasswordToken来模拟获取用户从前台登陆的账号密码。
  5. 最后我们使用subject.login(token);进行认证。若tonken中的账号密码和我们addUser()添加的相同则测试通过,否则则会抛出异常。

Shiro认证我们先说这么多,下节我们来说说Shiro的简单授权。如果大家有好的意见和建议请在评论区留言,谢谢大家。


不吃香菜
244 声望64 粉丝