来自开涛的跟我学shiro
#demo1 ini配置的测试用例
以junittest方式允许cn.ilongfei.shirodemo.demo1.Demo1Test.java
目的:
跟踪程序,了解最基本的运行方式。
#demo2 最简单的realm
例子有误导,realm的getAuthenticationInfo应该从数据源获取userInfo信息,
但是该实例中判用户名和密码,可能误导读者以为这里判好就通过了,实际上比对密码的工作在AuthenticatingRealm
中的getAuthenticationInfo方法中, 通过assertCredentialsMatch(token, info)来判断token是否和info一致(比对密码)
该方法不可覆盖,但是可以设置matcher改变密码比对的实现,设置realm的CredentialsMatcher.
#demo3 权限初步
在AuthorizingRealm的hasRole中判断,比对的方法是从info中取出roles,确认其中是否contains需比较的role的字符串
在跟踪过程中发现SimpleAccountRealm中竟然维护了users map,之后的info都是从users中根据username检索出来的。
* checkRole/checkRoles 和 hasRole/hasAllRoles 不同的地方是它在判断为假的情况下会抛出 UnauthorizedException 异常
* hasPermission 流程如下:
Subject.isPermitted(String permission)
securityManager.isPermitted(getPrincipals(), permission)