この記事に書いてあること
Spring MVCを使っていて、レスポンスヘッダにno-storeやno-cacheという項目を付与したい場面があったのでメモ。
Spring Securityを使わずにServlet-Context.xmlを使う方法でいきます。
前提
- Spring MVC 5.x
- Java11
結論
servlet-context.xml に設定します。
これにより、Controllerの終了後にWebContentInterceptorクラスが実行され、以下のようなresponseヘッダが設定されます。
Cache-Control: no-cache, no-store Pragma: no-cache Expires: 0
以下の記述を追加してください。
<interceptors>
<bean id="webContentInterceptor"
class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<property name="cacheSeconds" value="0"/>
<property name="useExpiresHeader" value="true"/>
<property name="useCacheControlHeader" value="true"/>
<property name="useCacheControlNoStore" value="true"/>
</bean>
</interceptors>
なお、servlet-context.xmlの書き方次第では、mvc:interceptorsとしたり、beans:beanとしないといけない場合があります。
ちょっと説明
cacheSeconds
- -1: キャッシュ関連のヘッダーは出力しません。
- 0: no cache 関連のヘッダーが出力されます。
- 1以上: 100を指定した場合、'Cache-Control: max-age=100'というヘッダが出力されます。
useExpiresHeader
trueにすると、Expiresヘッダが出力されます。
Expires: Thu, 01 Jan 1970 00:00:00 GMT
useCacheControlHeader
trueにすると、以下のヘッダが出力されます。
Cache-Control: no-cache
useCacheControlNoStore
trueにすると、以下のヘッダが出力されます。
Cache-Control: no-store