002 shiro的三个核心API

一 . 概述

  本次简单的说明一下shiro的使用,将上一节的shiro的基本功能进行一下说明.


 二 . 核心API

  上一节我们说到Shiro对外部的核心对象有三个

  [1]Subject : 描述用户对象

  [2]SecurityManager : 安全管理器对象,封装shiro功能的对象.

  [3]Realm : 安全数据的提供者.

本节的核心作用就是说明一下上述的API对象的简单使用.


三 . SecurityManager

(1)我们此处使用固定数据源的操作,会使用ini文件完成Realm的实现,并使用对应的IniSecurityManager.

      //实现shiro的认证过程
        //创建SecurityManager
        SecurityManager securityManager = new IniSecurityManagerFactory("classpath:shiro.ini").createInstance();
        //将当前的SecurityManager设置到当前的环境之中
        SecurityUtils.setSecurityManager(securityManager);

我们通过一个ini文件创建一个SecurityManager对象,并将其设置到全文环境之中.

(2)Subject对象的获取

//下面实现的是一个登陆的功能
        //获取Subkect,相当与一个Currentuser
        Subject currentUser = SecurityUtils.getSubject();

我们从工具类之中获取Subject对象.


四 .Subject的功能

从上图之中我们可以看到.Subject对象封装了大量的功能,比如登录login(),还有大量的授权方法(检查是否具有某个权限的方法),我们以后的应用代码大部分时候都是

与Subject对象发生交互.


 五.Realm

我们首先看一下类图,发现Realm是顶层的接口,其中有一个方法:

 AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException;

上面的方法就是获取认证信息的方法,传入的参数是一个认证的凭证(账号和密码),如果认证成功,就返回一个用户的身份信息,否则就抛出异常.

但是,我们发现Realm之中没有授权的方法,这个方法被放到了AuthorizingRealm这个接口之中.

 protected abstract AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals);

上面的方法表示,通过用户的主体信息返回用户的授权信息(就是通过用户的身份信息在检查权限的时候判断是否具有权限).

因此,我们想要让我们的Realm提供认证和授权的的信息就需要继承这个类完成定制.

 

posted @ 2018-05-16 22:43  最爱五仁月饼  阅读(991)  评论(0编辑  收藏  举报