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でやれるというぐらいの
アイディアは普通に思いつくと思うんだ...