我使用 WildFly 16 并正在对 Java EE 8 Security API 进行一些实验。我有一个这样的 JAX-RS 端点(在 web.xml、jboss-web.xml 中有一些定义):
@Path("/secured")
public class SecuredResource {
@Inject
private SecurityContext securityContext;
@GET
@Path("/greet")
@RolesAllowed({"USER"})
@Produces(MediaType.TEXT_PLAIN)
public Response greet() {
return Response.ok().entity("Hello " + securityContext.getCallerPrincipal().getName()).build();
}
}
正如我所料,没有“USER”角色的请求不会到达那里的代码,但这些请求会获得代码为 200 的 http 响应。我想为这些请求返回“401 Unauthorized”,而不是 200。
根据 RESTEasy 的一些文档,它的行为应该是这样的:
Resteasy如何做授权?嗯,它真的很简单。它只是查看一个方法是否用@RolesAllowed 注释,然后只执行HttpServletRequest.isUserInRole。如果其中一个@RolesAllowed 通过,则允许该请求,否则,将使用 401(未授权)响应代码发回响应。
但就我而言,情况并非如此。我怎样才能让它这样工作?
这是我的实验实现的整个项目。它还有一个测试用例,显示了我的期望。它可以运行./mvnw clean verify