Spring Security读书笔记--hierarchicalroles角色权限的设定
厌烦了权限角色的设定,walk through Jar文件的时候,发现了Spring Security有hierarchicalroles类。支持角色的继承。
试了一下的确好用,但使用过程中有许多要支持的东东。
1、XML设定
<bean id="roleHierarchy"name="code">@SuppressWarnings("unchecked")public GrantedAuthority[] getAuthorities() {// return the value according the user infologger.debug("roles is :" + DebugUtil.printObject(user.getRoles()));GrantedAuthority[] auths = new GrantedAuthorityImpl[user.getRoles().size()];int i = 0;for (Role role : user.getRoles()) {auths[i] = new GrantedAuthorityImpl(role.getAuthority());i++;}// return// roleHierarchy.getReachableGrantedAuthorities(user.getRoles().toArray// (new GrantedAuthority[0]));return roleHierarchy.getReachableGrantedAuthorities(auths);}
?要说的问题就出现在了红色部分,因为直接在Role里继承了GrantedAuthority 原来我是直接返回Roles的如果不用roleHierarchy没有任何问题。但在roleHiberarchy中就不行。
查了source发现它是在匹配的时候,用的是GrantedAuthorityImpl在collection中进行的。如果用roles就会匹配不上虽然
role也继承了GrantedAuthority 但还继承了其他东东,只好做了一个转换。
?
3.效果
如果角色ROLE_ADMIN登录,系统会给出(Granted Authorities: ROLE_ADMIN, ROLE_USER )。这样它就可以直接使用两个权限了。再也不用写@secured(ROLE_ADMIN, ROLE_USER)。一个@secured(ROLE_USER)就解决。
?
?