Jersey 通过在web资源的构造函数中插入SecurityContext检查主用户

Jersey 通过在web资源的构造函数中插入SecurityContext检查主用户,jersey,jax-rs,Jersey,Jax Rs,与Jersey和JAX-RS相比,我比较新,但在关于在资源构造函数中使用SecurityContext的文档中,我找不到自己的方法 我们的OAUTH实现目前是这样的:RESTAPI上的所有请求都被ResourceFilter的实现拦截。因此,资源筛选器通过调用以下命令来设置用户主体: containerRequest.setSecurityContext(new MySecurityContext(user)); 。。。在ContainerRequest.filter()方法中,使用具体类My

与Jersey和JAX-RS相比,我比较新,但在关于在资源构造函数中使用SecurityContext的文档中,我找不到自己的方法

我们的OAUTH实现目前是这样的:RESTAPI上的所有请求都被ResourceFilter的实现拦截。因此,资源筛选器通过调用以下命令来设置用户主体:

containerRequest.setSecurityContext(new MySecurityContext(user));
。。。在ContainerRequest.filter()方法中,使用具体类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构造函数中的主要用户


谢谢

如果我将其注入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();
}