簡體   English   中英

允許 quarkus-oidc 自定義 403 的響應正文

[英]Allow quarkus-oidc to customize response body of 403

我想在 quarkus oidc 應用程序中自定義 403/401 的響應體。 我已經嘗試了很多事情來實現它,但無法做到。 同樣可以在 Spring 啟動中輕松實現。

使用聲明式安全( @RolesAllowed@Authenticated ...),身份驗證違規錯誤作為安全擴展拋出的異常處理,然后使用標准JAXRS 異常映射機制映射這些異常。

這意味着,您唯一需要修改這些錯誤的響應,就是為您想要的特定異常創建一個異常映射器。 在 Quarkus 安全中,相關的異常是: io.quarkus.security.ForbiddenExceptionio.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();
  }
}

請注意,您的異常映射器需要具有正確的@Priority值(值越低,prio 越高)因為 Quarkus 已經為這些異常捆綁了映射器(在quarkus-resteasy擴展內),因此您需要提供一個具有更高優先覆蓋它們。 這些內置映射器實際上負責您看到的 401/403 響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM