shiro-realm授权过虑器


使用PermissionsAuthorizationFilter


在applicationContext-shiro.xml中配置url所对应的权限


测试流程:
1、在applicationContext-shiro.xml中配置filter规则
	<!--商品查询需要商品查询权限  -->
	/items/queryItems.action = perms[item:query]
2、用户在认证通过后,请求/items/queryItems.action
3、被PermissionsAuthorizationFilter拦截,发现需要“item:query”权限
4、PermissionsAuthorizationFilter调用realm中的doGetAuthorizationInfo获取数据库中正确的权限
5、PermissionsAuthorizationFilter对item:query 和从realm中获取权限进行对比,如果“item:query”在realm返回的权限列表中,授权通过


在realm中写授权的方法


	// 用于授权
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(
			PrincipalCollection principals) {
		
		//从 principals获取主身份信息
		//将getPrimaryPrincipal方法返回值转为真实身份类型(在上边的doGetAuthenticationInfo认证通过填充到SimpleAuthenticationInfo中身份类型),
		String userCode = (String)principals.getPrimaryPrincipal();
		
		//根据身份信息获取权限的信息
		//模拟从数据库中取得该用户的权限信息
		List<String> permissions = new ArrayList<String>();
		/**
		 * 用户的查询权限,这个权限拥有了 这个权限,当该用户访问
		 * /items/queryItem.action = perms[item:query]
		 * 时就不会被拦截住
		 * 就是说这个用户拥有该资源的访问权限
		 */
		permissions.add("item:query");
		
		//查询权限数据,返回授权信息
		SimpleAuthorizationInfo sAuthorizationInfo = new SimpleAuthorizationInfo();
		//将用户的权限信息填充到sAuthorizationInfo中返回
		sAuthorizationInfo.addStringPermissions(permissions);
		
		return sAuthorizationInfo;
	}
	



如果授权失败,跳转到refuse.jsp,需要在spring容器中配置:已经在applicationContext-shiro.xml中配置了

<!-- 这是认证之后访问没有权限的资源,会统一跳转到这个jsp -->
<property name="unauthorizedUrl" value="/refuse.jsp"></property>


但是这种授权的方式存在两个问题

1、在applicationContext-shiro.xml中配置过虑器链接,需要将全部的url和权限对应起来进行配置,比较发麻不方便使用。

2、每次授权都需要调用realm查询数据库,对于系统性能有很大影响,可以通过shiro缓存来解决


可以通过下一章的注解和标签来解决这些问题












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值