这是Spring Security的RunAsManagerImpl
中的错误,还是我的期望错误?Spring Security的RunAsManagerImpl工作吗?
我的(有限的)文件的理解,是一个RunAsManagerImpl
在我的配置定义如果我叫doFoo()
在以下几点:
@Secured({"ROLE_FOO", "RUN_AS_BAR"})
public void doFoo() {
doBar();
}
@Secured("ROLE_BAR")
public void doBar() {
// ...
}
然后,提供的电流Authentication
有作用“FOO” doBar()
将成功执行。
但它没有,Spring抛出一个AccessDeniedException。但是,将doBar()
的注释更改为:
@Secured("ROLE_RUN_AS_BAR")
成功运行。
一旦source code的检查,原因是相当明确的 - 如果它遇到以 “RUN_AS_” 开头的属性,它会创建:
GrantedAuthority extraAuthority = new SimpleGrantedAuthority(getRolePrefix() + attribute.getAttribute());
中,默认情况:
private String rolePrefix = "ROLE_";
所以应用的权限是“ROLE_RUN_AS_BAR”,这看起来并不正确。这是我应该提出的错误,还是我误解了此功能的预期用途?
你说得对,当然,谢谢。出于某种原因,我将“RUN_AS_关键字的其余部分”解释为没有“RUN_AS_”前缀,并以某种方式设法忽略他们给出的明确示例。正如你所说,很容易重新实现,我只是对我对文档的误解感到困惑。 – DaveyDaveDave