我已通过添加以下类将Cache-Control添加到端点响应:
@Component
public class CacheControlInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
return true;
}
}
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
HandlerInterceptor cacheControlInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CacheControlInterceptor()).addPathPatterns("/person/*");
}
}
如果所有“/ person / *”具有相同的缓存控制标头,则此方法正常。然而,现在我们要求说不同的人将具有不同的 max-age (例如/ person / 1是300& / person / 2是1000)。顺便说一句,这个要求是由于分布式缓存具有针对不同人员的各种到期时间。如何存档?
检索人员时,PersonService 类将具有 max-age 值。 我可以将 maxAge 属性添加到 CacheControlInterceptor ,该属性将在 PersonService 中自动加载吗?然后我可以在 preHandle(...)中将其设置为 HttpServletResponse 。只关心 CacheControlInterceptor 是单例,它是否适用于多个请求?
我能想到的另一种方法是在 HttpServletRequest 中设置 maxAge 属性,然后 CacheControlInterceptor 可以使用该属性。但是如何将它从 PersonService 暴露给RestMapping处理程序方法呢?
答案 0 :(得分:0)
由于您FIRST earlier than LAST # Because 21 is less than 11PM (=23)
FIRST later than LAST # Because 12 is greater than 10AM (=10)
FIRST same as LAST # Because 23 is the same as 11PM (=23)
之间的人员不同,我说保留max-age
中的所有常见Cache-Control
说明,然后在服务中添加Intercepter
值加载max-age
。如下所示:
Person