看过我的Shiro认证部分博文的童鞋们一定已经对Shiro安全框架有了一些的认识,关于Shiro框架大致的认证流程,框架内部为我们提供了哪些功能实现,都有了大致的了解,这篇博文主要大致讲解一下shiro授权的部分的具体实现流程,和代码片段。
授权,顾名思义是判断用户具体的有哪些权限,我们去开发一个系统,首先看来访者有没有访问系统的权限,进入系统的这一方面是认证,而在用户进入了 我们的系统之后,我们的系统会有很多的菜单或者对资源的增删改查操作,并不是所有的用户都能对我们的系统进行所有操作,假设我们是一个商城的小系统,订单的创建,订单的管理,用户的管理都不是所有用户可以操作的,有些账号只拥有查看的权限,而有一些比如admin账号才具有对系统某些核心模块的操作。但是大的流程不会变得是所有的用户在进入系统之前首先是要经过认证,如果都没有通过认证当然就不去判断用户是否具有哪些权限。
那接下来我就接着上次的认证代码继续写,没看过我上一篇博文的童鞋可以去看一下,
传送门:https://blog.csdn.net/JavaJieRui/article/details/108465791
首先,我们调用subject(主体)的 hasRole("admin") 方法,这个方法是用来看主体对象有没有某一个具体的权限,假设我们来看一下主体对象有没有admin的权限:
if (subject.isAuthenticated()) {
System.out.println(subject.hasRole("admin"));
}
结果一定是没有,为什么呢?因为在我们的自定义Realm里没有对用户的权限进行添加,只是在方法中返回了一个null值,因为在调用这个方法的时候他会去找我们自定义Realm中的 doGetAuthorizationInfo 方法,而我们只是返回了一个null值,所以会输出false:
doGetAuthorizationInfo 方法代码片段:
/**
* 授权
* @param principalCollection
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
输出结果: