我试图在Spring引导中使用缓存(咖啡因(,但我遇到了问题。我需要检查标题";标题名称";在每次调用中,但应用程序都在缓存它,所以在第一次请求具有正确标头后,无论我发送什么标头,应用程序都不会检查它,只是从缓存中返回数据,我是否可以强制spring检查标头,然后从缓存中获取数据?
@GetMapping("/request-a")
@Cacheable(cacheNames = "cachename", key = "#root.methodName")
public ResponseEntity<?> makeRequest(@RequestHeader("header-name") String headerName) {
this.authConfig.headerCheck(headerName);
/*
code
*/
}
我已经使用了头";缓存控制:无缓存";并没有解决我的问题。
提前谢谢。
第1版:方法";headerCheck";只需检查它是否等于另一个String或不为null。
找到了一个解决方案:
创建一个实现HandlerInterceptor的类,并使用preHandle方法。
@Component
public class CheckHeaderInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// validate what you want, on error return false
// if everything its ok, return true
}
}
然后用注册处理程序
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private CheckHeaderInterceptor interceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor).addPathPatterns("url that you wannna use handler");
}
}