1.4. OIDC 请求过滤器
您可以通过注册一个或多个 OidcRequestFilter 实现(可以更新或添加新的请求标头)来过滤 Quarkus 向 OIDC 供应商发出的 OIDC 请求,以及日志请求。如需更多信息,请参阅 OIDC 请求过滤器。
1.4.1. OIDC 响应过滤器 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以通过注册一个或多个 OidcResponseFilter 实现来过滤 OIDC 供应商的响应,该实现可以检查响应状态、标头和正文,以记录它们或执行其他操作。
您可以有一个过滤器,截获所有 OIDC 响应,或使用 @OidcEndpoint 注解来仅将此过滤器应用到特定的端点响应。例如:
package io.quarkus.it.keycloak;
import jakarta.enterprise.context.ApplicationScoped;
import io.quarkus.arc.Unremovable;
import io.quarkus.logging.Log;
import io.quarkus.oidc.common.OidcEndpoint;
import io.quarkus.oidc.common.OidcEndpoint.Type;
import io.quarkus.oidc.common.OidcResponseFilter;
import io.quarkus.oidc.common.runtime.OidcConstants;
import io.quarkus.oidc.runtime.OidcUtils;
@ApplicationScoped
@Unremovable
@OidcEndpoint(value = Type.DISCOVERY)
public class DiscoveryEndpointResponseFilter implements OidcResponseFilter {
@Override
public void filter(OidcResponseContext rc) {
String contentType = rc.responseHeaders().get("Content-Type");
if (contentType.equals("application/json") {
String tenantId = rc.requestProperties().get(OidcUtils.TENANT_ID_ATTRIBUTE);
String metadata = rc.responseBody().toString();
Log.debugf("Tenant %s OIDC metadata: %s", tenantId, metadata);
}
}
}