`
erichua
  • 浏览: 516772 次
  • 性别: Icon_minigender_2
  • 来自: 远方
社区版块
存档分类
最新评论

Spring Security读书笔记--hierarchicalroles角色权限的设定

阅读更多

厌烦了权限角色的设定,walk through Jar文件的时候,发现了Spring Security有hierarchicalroles类。支持角色的继承。

试了一下的确好用,但使用过程中有许多要支持的东东。

1、XML设定

	<bean id="roleHierarchy"
		class="org.springframework.security.userdetails.hierarchicalroles.RoleHierarchyImpl">
		<property name="hierarchy">
                         <!--表示Admin包含user-->
			<value>ROLE_ADMIN>ROLE_USER</value>
		</property>
	</bean>

 2、Java中获取权限角色的地方

	@SuppressWarnings("unchecked")
	public GrantedAuthority[] getAuthorities() {

		// return the value according the user info
		logger.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)就解决。

 

 

4
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics