修理ETag头不生成的bug

修复ETag头不生成的bug
已经注入了过滤器ShallowEtagHeaderFilter
@Bean
public Filter etagFilter() {
    return new ShallowEtagHeaderFilter();
}


但ETag响应头没有生成。

解决过程:
查看ShallowEtagHeaderFilter源代码,发现这个方法:
protected boolean isEligibleForEtag(HttpServletRequest request, HttpServletResponse response,
		int responseStatusCode, byte[] responseBody) {

	if (responseStatusCode >= 200 && responseStatusCode < 300 &&
			HttpMethod.GET.name().equals(request.getMethod())) {
		String cacheControl = (responseGetHeaderAvailable ? response.getHeader(HEADER_CACHE_CONTROL) : null);
		if (cacheControl == null || !cacheControl.contains(DIRECTIVE_NO_STORE)) {
			return true;
		}
	}
	return false;
}


原来ETag的生成需要满足三个条件:

    [1]响应状态一定得是2xx
    [2]请求方法为GET
    [3]响应Cache-Control头部没设置或者不能包含“no-store”指令

那就好办了,再response里制定Cache-Control
response.setHeader("Cache-Control", "no-cache");