一 . 概述
本次简单的说明一下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提供认证和授权的的信息就需要继承这个类完成定制.