Spring Security';什么是RunAsManagerImpl工作?
这是Spring Security的Spring Security';什么是RunAsManagerImpl工作?,spring,spring-security,Spring,Spring Security,这是Spring Security的RunAsManagerImpl中的一个bug,还是我的期望是错误的 我对(有限的)文档的理解是,如果我在下面调用doFoo(),我的配置中定义了RunAsManagerImpl: @Secured({"ROLE_FOO", "RUN_AS_BAR"}) public void doFoo() { doBar(); } @Secured("ROLE_BAR") public void doBar() { // ... } 然后,如果当前的身份验证具
RunAsManagerImpl
中的一个bug,还是我的期望是错误的
我对(有限的)文档的理解是,如果我在下面调用doFoo()
,我的配置中定义了RunAsManagerImpl
:
@Secured({"ROLE_FOO", "RUN_AS_BAR"})
public void doFoo() {
doBar();
}
@Secured("ROLE_BAR")
public void doBar() {
// ...
}
然后,如果当前的身份验证
具有“FOO”角色,doBar()
将成功执行
但事实并非如此,Spring抛出了AccessDeniedException。但是,将doBar()
的注释更改为:
@Secured("ROLE_RUN_AS_BAR")
工作顺利
检查后,原因相当清楚-如果遇到以“RUN_AS_”开头的属性,则会创建:
GrantedAuthority extraAuthority = new SimpleGrantedAuthority(getRolePrefix() + attribute.getAttribute());
其中,默认情况下:
private String rolePrefix = "ROLE_";
因此,应用的权限是“角色运行”和“角色栏”,这似乎根本不正确。这是我应该提出的错误,还是我误解了此功能的预期用途?这是预期行为,如文档中所述: 创建的GrantedAuthorityImpls将以特殊 表示它是一个角色的前缀(默认前缀值为role_), 然后是RUN_AS_u关键字的剩余部分。例如,将_作为_FOO运行 将导致创建角色_RUN _AS _FOO的授权 这种基本实现的目的不是模仿用户,而是获得“技术角色”。例如,代码的某些部分需要“数据库管理器”的技术角色。没有用户具有此角色,但可以通过编程方式获取我 当然,只需更新
SecurityContextHolder
中的Authentication
,就可以绕过此代码,但是当jvm securitymanager使用Authentication
对象时,有一个“升级”该对象的中心实现点可以更安全
然而,
RunAsManager
是一个非常简单的界面,以便轻松地重新实现:如果默认行为与您需要的不匹配,您只有一种方法可以重新实现。当然,您是对的,谢谢。出于某种原因,我把“剩余的RUN_AS_u关键字”理解为没有“RUN_AS_u”前缀的意思,并设法忽略了他们给出的清晰示例。正如你所说,重新实现很容易,我只是被我对文档的误解弄糊涂了。