✍️blog

技術系のこととか

Springですべてのレスポンスに任意のHTTPヘッダを追加したい

様々な事情からレスポンスに任意のHTTPヘッダを追加したいことがあるかと思います。
それも、特定のパスだけではなくすべてのレスポンスに対してという。

Spring内ではなくリバースプロキシとかアプリの前段階で付与というパターンもあるような気もしますが、
Interceptorを使って実装することがあったので残しておきます。

前提

  • Spring Boot 2.7.4

Interceptorの準備

以下のような形でInterceptorを用意します。
ヘッダーの追加はpostHandleで行います。

// ※)importなど細かい部分は省略しています。  

public class HeaderAppendInterceptor implements HandlerInterceptor {

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav) throws Exception {

        response.addHeader("Custom-Header", "hoge");  
    }
}

InterceptorをBean登録

Configクラスで作成したInterceptorをBean登録します。

@Configuration
public class AppConfig {

@Bean
HeaderAppendInterceptor headerAppendInterceptor() {
  return new HeaderAppendInterceptor();
}

InterceptorをRegistryに登録

Interceptorとして機能するようにRegistryに登録します。

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

  @Autowired
  HeaderAppendInterceptor headerAppendInterceptor;
  
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // その他にレスポンスを変更するInterceptorがある場合は追加する順番に注意
    registry.addInterceptor(headerAppendInterceptor);
  }
}

以上の処理を加えてアプリを動かせば、レスポンスにInterceptorで追加したヘッダーが入っているかと思います。

まとめ

たぶん、Springをそこそこやっている人ならInterceptorでやれるというぐらいの
アイディアは普通に思いつくと思うんだ...

via GIPHY