我将在我的代码中使用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。
我有什么错吗?你有任何解决方案吗?
感谢。
答案 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。