[英]Access user info from SecurityIdentity using quarkus-oidc
[英]Allow quarkus-oidc to customize response body of 403
我想在 quarkus oidc 應用程序中自定義 403/401 的響應體。 我已經嘗試了很多事情來實現它,但無法做到。 同樣可以在 Spring 啟動中輕松實現。
使用聲明式安全( @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 響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.