RESTEasy возвращает http-код 200 для запросов, которые не выполняют @RolesAllowed - PullRequest
0 голосов
/ 26 мая 2019

Я использую WildFly 16 и провожу эксперимент с API безопасности EE 8. У меня есть конечная точка 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», не достигают там кода, но эти запросы получают http-ответы с кодом 200. Я хочу вернуть «401 Unauthorized» для этих запросов, а не 200 .

Согласно документу RESTEasy , он должен вести себя так:

Как Resteasy выполняет авторизацию? Ну, это действительно просто. Он просто видит, аннотирован ли метод с помощью @RolesAllowed, а затем просто выполняет HttpServletRequest.isUserInRole. Если один из @RolesAllowed пройдет, то разрешите запрос, в противном случае ответ будет отправлен обратно с кодом ответа 401 (неавторизованным).

Но в моем случае это не так. Как я могу заставить это работать таким образом?

Это весь проект моей экспериментальной реализации . У него также есть тестовый пример, который показывает мои ожидания . Может работать с ./mvnw clean verify

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...