這是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