0

我使用 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

4

0 回答 0