为什么apache shiro WildcardPermisssion对象在版本1.2.0中不起作用

时间:2014-07-02 07:42:35

标签: shiro

我将在我的代码中使用WildcardPermission。我使用它类似下面的代码:

getSubject().isPermitted(new WildcardPermission("a:b:*"));
getSubject().isPermitted(new WildcardPermission("a:b"));
getSubject().isPermitted(new WildcardPermission("a:b:c,d"));
getSubject().isPermitted(new WildcardPermission("a:b:c"));
getSubject().isPermitted(new WildcardPermission("a:b:d"));  

前3行返回false,但第4行和第5行返回true。我使用apache shiro 1.2.0。
我有什么错吗?你有任何解决方案吗?
感谢。

1 个答案:

答案 0 :(得分:0)

您实际执行的操作是使用用于声明权限的字符串进行查询。

考虑到您的评论,权限声明应该是:

[role]
x = a:b:c,d,e

现在角色x声明它拥有以下权限:b:c,a:b:d和a:b:e。

这些是您可以检查权限的值。您无法检查通配符,因为这些通配符仅用于声明权限。 因此查询a:b:*或a:b:c,d将从不工作。

如果你在shiro.ini中专门声明了它,那么查询a:b会有效。

所以你唯一可以查询的是:b:c,a:b:d和a:b:e。

举另一个例子。用户x可以有权打印任何内容,但用户y只能在epson上打印。 您将用户x的权利声明为:print:*,将用户y的权利声明为print:epson。

现在用户x打印:epson和print:兄弟将返回true,但对于用户y只打印:epson将返回true并打印:brother将返回false。

因此,您声明某个角色/用户允许使用a:b或a:b:*下面的任何内容,但您查询的实际操作应该是特定的,所以这就是为什么只有a:b: c和a:b:d返回true。