一、什么是授权
授权——即访问控制,判断用户是否对资源有访问权限。例如:用户是否有查看某页面的权限,用户是否有操作某按钮的权限等。
二、名词
权限、角色、用户
三、授权内部处理机制
1、调用授权验证方法(Subject的isPermitted*或 hasRole*等)
2、Subject的实例通常是DelegatingSubject类(或子类)的实例对象,在认证开始时,会
委托应用程序设置的securityManager实例调用相应的 isPermitted*或 hasRole*方法。
3、接下来 SecurityManager会委托内置的 Authorizer的实例(默认是
ModularRealmAuthorizer类的实例,类似认证实例,它同样支持一个或多个 Realm实例认
证)调用相应的授权方法。
4、每一个 Realm将检查是否实现了相同的 Authorizer接口。然后,将调用 Reaml自己的
相应的授权验证方法。
当使用多个 Realm时,不同于认证策略处理方式,授权处理过程中:
1、当调用 Realm出现异常时,将立即抛出异常,结束授权验证。
2、只要有一个 Realm验证成功,那么将认为授权成功,立即返回,结束认证。
四,代码示例
自定义 Realm中,重载doGetAuthorizationInfo()方法,重写获取用户权限的方法:
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollectionprincipals) {
String permissionName;
try{
SimpleAuthorizationInfo author = new SimpleAuthorizationInfo();
String username = (String) principals.getPrimaryPrincipal();
System.out.println(username);
List<String> lstPermission = permissionMgr
.queryUserPermission(username);
Iterator<String> it = lstPermission.iterator();
while(it.hasNext()) {
permissionName= it.next().toString();
author.addStringPermission(permissionName);
}
return author; //返回权限集合
}catch (Exception e) {
e.printStackTrace();
returnnull;
}
}
五,总结
认证、授权都是通过Realm来处理的,在Realm中访问数据源获取验证信息及授权信息。可以说, Realm 是专用于安全框架的 DAO。