天天看点

shrio教程初级(五)shiro基础(授权)一、前言二、shrio权限授权三、shrio权限授权(自定义realm)四、授权流程总结

回忆过去,shiro的认证忘不了:

0:通过securityFactory建立securityManager,加入securityUtil加入环境

1、subject(主体)请求认证,调用login(token)

2、securityManager开始认证

3、securityManager通过ModularRealmAuthenticator进行认证

4、ModularRealmAuthenticator将token传统给realm,realm根据token从数据源(库)查询用户信息的身份和凭证(用户名与密码)。

5、realm查询不到返回空(用户不存在异常),如果凭证错误,返回凭证错误。否则返回正确的AuthenticationInfo(认证信息)

权限授权验证,一样是四个步骤,写ini文件-----加载ini----认证用户----权限验证,请注意任何认证之后才验证权限,是一般的思路不要忘记了。

shiro-permission.ini

解读:user:create为我们的权限标示,表达:资源:操作:实例。因为我们这里默认是有实例。其实应该是:user:create:*  当然也可以真的某一个实例:user:create:01

    ycy=111,role1 逗号第一位为我们的凭证(密码),后面为角色。

编写权限认证不要忘记用户认证

程序里面只多了个permitted(权限)或者hasRole(角色),其他的与我们用户认证是一样的。

1、对subject进行授权,调用的方法ispermitted("permission");括号里面为权限串:user:create

2、securityManager执行授权,通过ModularRealmAuthorize执行授权

3、ModularRealmAuthorizer执行realm从数据源查询数据 (调用doGetAuthorizationInfo)

4、ModularRealmAuthorizer(授权器)调用PermissionResolve(权限解析器)进行全新串对比

5、对比之后,ispermitted中的permission串与realm查询的串对比,无权限则抛出异常。有权限则通过授权。

注意:这个授权器modularRealmAuthorize跟我们的ModularRealmAuthenticator很像,做的事情也是从realm查询对比,但是功能不一样的:

ModularRealmAuthorizer 返回:SimpleAuthenticationInfo  

认证信息

ModularRealmAuthenticator返回:simpleAuthorizationInfo

权限信息