Отправить пользовательский ответ, когда аутентификация пользователя не авторизована - PullRequest
0 голосов
/ 18 октября 2019

Я следую инструкциям JWT для quarkus здесь . Я хочу отправить пользовательский ответ, когда UserGroup не разрешен доступ к API.

Это пример, показанный в руководстве.

@GET()
@Path("roles-allowed") 
@RolesAllowed({"Echoer", "Subscriber"}) 
@Produces(MediaType.TEXT_PLAIN)
public String helloRolesAllowed(@Context SecurityContext ctx) {
    Principal caller =  ctx.getUserPrincipal();
    String name = caller == null ? "anonymous" : caller.getName();
    boolean hasJWT = jwt != null;
    String helloReply = String.format("hello + %s, isSecure: %s, authScheme: %s, hasJWT: %s", name, ctx.isSecure(), ctx.getAuthenticationScheme(), hasJWT);
    return helloReply;
}

Как узнать, не является ли запрос несанкционированным, чтобы я мог отправить пользовательский ответ.

1 Ответ

0 голосов
/ 18 октября 2019

Краткий ответ: теперь это невозможно сделать. (объяснение в разделе ОБНОВЛЕНИЕ)

Похоже, что это приложение JEE, поэтому, возможно, вот ваш ответ
Или попробуйте это . Или добавьте провайдера:

@Provider
public class CustomReasonNotAuthorizedException implements ExceptionMapper<NotAuthorizedException> {

    public Response toResponse(NotAuthorizedException bex) {
        return Response.status(Response.Status.UNAUTHORIZED)
                .entity("your text")
                .build();
    }

}

ОБНОВЛЕНИЕ

Я проверил исходный код и попробую его в отладке, и похоже, что выполнение проходит этот код как ниже. Таким образом, вы не можете изменить сообщение «Не авторизован».

            HttpAuthenticator authenticator = identity.getAttribute(HttpAuthenticator.class.getName());
            RoutingContext context = ResteasyContext.getContextData(RoutingContext.class);
            if (authenticator != null && context != null) {
                authenticator.sendChallenge(context, null);
            } else {
                respond(requestContext, 401, "Not authorized");
            }
...