我对Jersey和JAX-RS比较新,但我在文档中找不到有关在Resource的构造函数中使用SecurityContext的方法。
我们的OAUTH实现目前使得REST API上的所有请求都被ResourceFilter的实现拦截。因此,资源过滤器通过调用:
来设置用户PrincipalcontainerRequest.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的构造函数中使用该用户主体。我试过注射 p>
@Context SecurityContext
..进入构造函数参数列表但是调用getUserPrincipal()只会产生null。
有没有办法在Webresource的构造函数中检查Principal用户?
谢谢!
答案 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();
}