允许 quarkus-oidc 自定义 403 的响应正文

Ute*_*ing 5 java openid-connect keycloak quarkus quarkus-oidc

我想在 quarkus oidc 应用程序中自定义 403/401 的响应正文。我尝试了很多方法来实现这一点,但未能做到。同样可以在 Spring boot 中轻松实现。

ynt*_*ual 3

使用声明性安全性(@RolesAllowed... @Authenticated),身份验证违规错误将作为安全扩展抛出的异常进行处理,然后使用标准JAXRS 异常映射机制来映射这些异常。

这意味着,您需要修改这些错误的响应的唯一方法是为您想要的特定异常创建异常映射器。在 Quarkus 安全性中,相关的异常是:io.quarkus.security.ForbiddenException和分别io.quarkus.security.UnauthorizedException对应403401错误。

403/Forbidden 错误的映射器示例:

import io.quarkus.security.ForbiddenException;

import javax.annotation.Priority;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider//register as JAXRS provider
@Priority(1)//override the build-int mapper(which has 5001 prio)
public class ForbiddenExceptionMapper implements ExceptionMapper<ForbiddenException> {
  @Override
  public Response toResponse(ForbiddenException exception) {
    return Response.status(Response.Status.FORBIDDEN)
      .entity(new MyErrorObject("ERR_NO_ACCESS","Sorry access forbidden"))
      .build();
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您的异常映射器需要具有正确的@Priority值(值越低,优先级越高),因为 Quarkus 已经为这些异常捆绑了映射器(在quarkus-resteasy扩展内部),因此您需要提供具有更高优先级的映射器来覆盖它们。这些内置映射器实际上负责您看到的 401/403 响应。