我正在嘗試基於我通過Jersey/JAX-RS公開的資源的角色設置身份驗證。此資源存在於Glassfish實例中,在該實例中,基於角色(具體而言,通過@RolesAllowed)進行的身份驗證當前正在根據需要進行工作。我在一個servlet容器中運行Jersey:@RolesAllowed總是拒絕(禁止)澤西島資源
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
而且我在我的資源上執行基本身份驗證;該要求正在按預期執行。我還提供了以下初始化參數澤西島:
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory</param-value>
</init-param>
然而,當我嘗試實際添加的@RolesAllowed批註,所有的訪問失敗。例如:
@Path("/my/resource")
@ManagedBean
@RolesAllowed({"SYSTEM"})
public class Resource {
// Accesses with credentials for a user that has the SYSTEM role fail!
}
如果我注入安全上下文並調用context.isUserInRole(),它將爲所有角色返回false。非常奇怪的是,如果我爲這個資源刪除我的@RolesAllowed註解,並使用有效的證書發出請求,那麼這個類可以成功訪問EJB,它需要用戶與我最初試圖測試的角色相同。看起來大概像澤西可能用錯誤的SecurityContext或其他一些認證。有沒有其他人經歷過這個?
用戶如何授予角色並且角色被恰當地映射(參見[this](http://docs.oracle.com/javaee/7/tutorial/doc/security-intro005.htm#BNBXJ)以供參考)? – DannyMo