关于Shiro框架权限标识符中*使用的总结

关于Shiro框架权限标识符中*使用的总结

Shiro框架中独创的权限标识符(Wildcard Perssions)可以很优雅的开发一些权限控制应用。基本规则官方文档说的很清楚了,这里记一下使用时碰到的一些问题。

关于权限标识符中*的使用

Shiro权限标识符的的默认规则:

规则:“资源标识符:操作:对象实例ID” 即对哪个资源的哪个实例可以进行什么操作。其默认支持通配符权限字符串,“:”表示资源/操作/实例的分割;“,”表示操作的分割;“*”表示任意资源/操作/实例。

通常我们只用到“资源标识符:操作”级别赖控制权限,比如“user:create”表示当前用户表示需要有“user”资源的“create”操作权限。权限标识符是支持通配符的,就像星号*,这里的星号指的是任何权限,比如“user:*”,指的就是对“user”资源的任意操作。但是,这个*在代码中控制权限应该注意:操作标识符的指的是用户需要拥有该资源的所有权限,而不是任意一个权限。

举个Srping mvc中Controller的栗子,当前user资源有view,create,update,delete操作.对于代码中的某个方法,有如下的权限控制声明:

@RequiresPermissions(value = {"user:*"} )
@RequestMapping(value="/list-user")
public void listUser(){
    //listusers
}

本来写这段代码的意思是:只要拥有user资源任意权限的用户,都能获取用户列表。但是程序运行后,会有问题:不管是有”user:create“,“user:delete"还是"user:view"的用户,调用listuser都会提示权限不足,除非用户同时拥有create,delete,view权限。对于jsp页面中,使用Shiro自带的权限控制标签,也会有相同的情况。

总结

在代码中使用Shiro的权限标识符时,对于操作,星号*指的是拥有资源的所有操作权限。而不是拥有资源任意权限。

引用资料

开涛的Shiro教程:http://jinnianshilongnian.iteye.com/blog/2020017

你可能感兴趣的:(java,shiro)