2013-05-02 57 views
3

我對Jersey和JAX-RS相對較新,但是我無法在有關在構造函數內部使用SecurityContext的文檔中找到我的方式資源。通過在Web資源的構造函數中注入SecurityContext來檢查Principal-user

我們的OAUTH實現目前是這樣的,REST API上的所有請求都被ResourceFilter的實現攔截。因此,資源過濾器通過調用設置用戶校長:

containerRequest.setSecurityContext(new MySecurityContext(user)); 

...的ContainerRequest.filter()方法中,wWith具體類MySecurityContext,如:

public class MySecurityContext implements SecurityContext { 

    private final User principal; 

    public MySecurityContext(final User user) { 
     this.principal = user; 
    } 

    @Override 
    public String getAuthenticationScheme() { 
     return SecurityContext.FORM_AUTH; 
    } 

    @Override 
    public Principal getUserPrincipal() { 
     return principal; 
    } 

    @Override 
    public boolean isSecure() { 
     return false; 

    } 

    @Override 
    public boolean isUserInRole(String role) { 
     return principal.getRoles().contains(role); 
    } 
} 

現在我想用在任何@ GET/@ POST/@ DELETE方法之前調用webresource構造函數中的用戶主體。我試過注入

@Context SecurityContext 

..進入構造函數的參數列表,但調用getUserPrincipal()只是返回null。

有沒有辦法在Webresource的構造函數中檢查Principal用戶?

謝謝!

回答

1

它爲我,如果我把它注射到我的API端點:

@POST 
@ResourceFilters({MyAuthenticationFilter.class}) 
public Response foo(@Context HttpServletRequest request, @Context SecurityContext security) { 
    final Principal principal = security.getUserPrincipal(); 
    [...] 
    return Response.status(Response.Status.OK).build(); 
}