我想在 quarkus oidc 应用程序中自定义 403/401 的响应体。我已经尝试了很多事情来实现它,但无法做到。同样可以在 Spring boot 中轻松实现。
问问题
87 次
1 回答
1
使用声明性安全性(@RolesAllowed
,@Authenticated
...),身份验证违规错误作为安全扩展抛出的异常处理,然后使用标准JAXRS 异常映射机制映射这些异常。
这意味着,您唯一需要修改这些错误的响应,就是为您想要的特定异常创建一个异常映射器。在 Quarkus 安全性中,相关的例外分别是:和io.quarkus.security.ForbiddenException
和io.quarkus.security.UnauthorizedException
错误。403
401
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();
}
}
请注意,您的异常映射器需要具有正确@Priority
的值(值越低,prio 越高),因为 Quarkus 已经为这些异常捆绑了映射器(内部quarkus-resteasy
扩展),因此您需要提供具有更高优先级的映射器来覆盖它们。这些内置映射器实际上负责您看到的 401/403 响应。
于 2021-11-17T20:04:35.767 回答