Spring-cloud-openfeign は初めてです。マイクロサービスベースのシステムを構築しようとしています。わかりやすくするために、ゲートウェイ、サービス A、サービス B の 3 つのサービスを取り上げます。フロントエンドから Gateway を介して Service-A にリクエストを送信すると、ゲートウェイはリクエスト内の JWT トークンを検証し、トークンからユーザー情報 (userId) を抽出して、リクエストにヘッダーとして挿入し、サービス A。Service-A は、feign-client を介して service-B を呼び出します。現在、feign-client を介したこのサービス間呼び出し中に、Feign RequestIterceptor を介して、Service-A の現在のリクエストから service-B への発信リクエストに userId を転送しようとしています。しかし、インターセプターで現在のリクエストを取得できません。このstack_over_questionで解決策を試しました、しかし、うまくいかないようです。このgithub_issueと同じ問題に直面していると思います。RequestContextListner または RequestContextFilter を使用して Dispatcher-Servlet から現在のリクエストを取得するようにアドバイスしているブログや記事をいくつか見ることができましたが、その使用方法や実装方法がわかりませんでした。以下は私が現在使用しているコードです
@Component
public class ProxyInterceptor implements RequestInterceptor {
private final static Logger LOGGER = LoggerFactory.getLogger(ProxyInterceptor.class);
@Override
public void apply(RequestTemplate requestTemplate) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
String userId = request.getHeader("userId");
LOGGER.info("userId {}", userId);
if (Optional.ofNullable(userId).isPresent()) {
requestTemplate.header(USER_ID_REQUEST_HEADER_VARIABLE, userId);
}
}
}
依存関係
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
このコードは、RequestContextHolder.getRequestAttributes() が null を返すため、NullPointer 例外をスローします。この問題を解決する方法はありますか?