JwtClientHeadersFactory.java

package io.extact.rms.client.api.adaptor.remote.auth;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import jakarta.ws.rs.core.MultivaluedHashMap;
import jakarta.ws.rs.core.MultivaluedMap;

import org.apache.commons.lang3.tuple.Pair;
import org.eclipse.microprofile.rest.client.ext.ClientHeadersFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.extact.rms.client.api.login.JsonWebTokenConsumeEvent;

/**
 * サーバから発行されたJsonWebTokenをリクエストヘッダに付加するクラス
 */
@ApplicationScoped
public class JwtClientHeadersFactory implements ClientHeadersFactory {

    private static final Logger LOG = LoggerFactory.getLogger(JwtClientHeadersFactory.class);
    private Pair<String, String> authHeader;

    @Override
    public MultivaluedMap<String, String> update(MultivaluedMap<String, String> incomingHeaders,
            MultivaluedMap<String, String> clientOutgoingHeaders) {

        if (authHeader == null) {
            return clientOutgoingHeaders;
        }

        var newHeadersMap = new MultivaluedHashMap<String, String>(clientOutgoingHeaders);
        newHeadersMap.add(authHeader.getKey(), authHeader.getValue());
        return newHeadersMap;
    }

    void onEvent(@Observes JsonWebTokenConsumeEvent event) {
        LOG.info("ヘッダに追加するJWTを受信しました");
        this.authHeader = event.getToken();
    }
}