通过Web资源的构造函数内的Injected SecurityContext检查Principal-user

时间:2013-05-02 15:57:53

标签: jersey jax-rs

我对Jersey和JAX-RS比较新,但我在文档中找不到有关在Resource的构造函数中使用SecurityContext的方法。

我们的OAUTH实现目前使得REST API上的所有请求都被ResourceFilter的实现拦截。因此,资源过滤器通过调用:

来设置用户Principal
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的构造函数中检查Principal用户?

谢谢!

1 个答案:

答案 0 :(得分: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();
}