国际物流云商项目笔记005:shiro的权限控制

一、实现方式

       有两种方式,第一种是在的shiro的配置文件(applicationContext-shiro.xml)中(即过滤器),第二种是通过注解

二、代码实现

1、配置文件

      在配置文件的<property name="filterChainDefinitions">标签下的<value>标签中,通过配置perms过滤器来控制访问,如需要控制部门管理的访问,可通过如下设置。等号之前的表示需要控制的路径,等号之后表示需要“部门管理”权限。如果无权限会根据配置文件中的<property name="unauthorizedUrl" value="/index2.jsp" />标签跳转到指定的页面

/sysadmin/deptAction* = perms["部门管理"]

       而“部门管理”这个权限是根据在自定义的类“AuthRealm”中授权方法(doGetAuthorizationInfo)里面,通过SimpleAuthorizationInfo对象的addStringPermission方法增加的权限名称。

2、注解

      由于Struts2框架和shiro框架存在冲突的问题,权限配置不能在web层进行,所以可以在service层配置。如在deptAction里面需要通过deptService对象的相关方法来获取需要的资源,所以可以在该方法上添加@RequiresPermissions注解来控制。

代码如下:

@Override
@RequiresPermissions(value="部门管理")
public Page<Dept> findPage(Specification<Dept> spec, Pageable pageable) {
	return deptDao.findAll(spec, pageable);
}

如果需要调用findPage方法,则需要“部门管理”权限,否则会抛异常

注意:注解的方式对于UserService无法控制,因为在自定义的AuthRealm类中的AuthenticationInfo方法需要UserService来获取数据库中的密码。也就是说只要是在AuthRealm类中被AuthenticationInfo使用的,都无法通过注解来控制

三、区别

      配置文件的方式无权限时会跳转到指定的页面,注解则会直接抛异常。而且配置文件比较集中,好管理,所以建议使用配置文件的形式。

      建议写一个action,配置控制权限,否则到最后写的话会很累

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红烧大白鲨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值