2013-05-02 64 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(); 
}