回忆过去,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
权限信息