1.3. OIDC 响应过滤器
您可以通过注册一个或多个 OidcResponseFilter
实现来过滤对 OIDC 客户端请求的响应,该实现可以检查响应状态、标头和正文,以记录它们或执行其他操作。
您可以有一个过滤器,截获对所有 OIDC 客户端请求的响应,或使用 @OidcEndpoint
注解将此过滤器应用到仅针对特定 OIDC 客户端请求的响应。例如:
package io.quarkus.it.keycloak; import jakarta.enterprise.context.ApplicationScoped; import org.jboss.logging.Logger; import io.quarkus.arc.Unremovable; 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; @ApplicationScoped @Unremovable @OidcEndpoint(value = Type.TOKEN) 1 public class TokenEndpointResponseFilter implements OidcResponseFilter { private static final Logger LOG = Logger.getLogger(TokenEndpointResponseFilter.class); @Override public void filter(OidcResponseContext rc) { String contentType = rc.responseHeaders().get("Content-Type"); 2 if (contentType.equals("application/json") && "refresh_token".equals(rc.requestProperties().get(OidcConstants.GRANT_TYPE)) 3 && rc.responseBody().toJsonObject().containsKey("refresh_token")) { 4 LOG.debug("Tokens have been refreshed"); } } }