标签:
授权——即访问控制,判断用户是否对资源有访问权限。例如:用户是否有查看某页面的权限,用户是否有操作某按钮的权限等。
权限、角色、用户
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。
标签:
原文地址:http://blog.csdn.net/hanxuemin12345/article/details/45246515