1.3. OIDC レスポンスフィルター
1 つ以上の OidcResponseFilter 実装を登録することで、OIDC クライアントリクエストへのレスポンスをフィルタリングできます。これにより、ログへの記録やその他のアクションを実行するために、レスポンスのステータス、ヘッダー、ボディーを確認できます。
1 つのフィルターですべての 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)
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");
if (contentType.equals("application/json")
&& "refresh_token".equals(rc.requestProperties().get(OidcConstants.GRANT_TYPE))
&& rc.responseBody().toJsonObject().containsKey("refresh_token")) {
LOG.debug("Tokens have been refreshed");
}
}
}