Spring开机+咖啡因缓存+检查header
Spring boot + Caffeine cache + Check header
我正在尝试将缓存(咖啡因)与 Spring 引导一起使用,但我遇到了问题。我需要在每次调用中检查 header“header-name”,但应用程序正在缓存它,因此在第一次使用正确的 header 请求后,不管我发送什么 header 和应用程序不会检查它,只是从缓存中返回数据,无论如何我可以强制 spring 检查 header 然后从缓存中获取数据吗?
@GetMapping("/request-a")
@Cacheable(cacheNames = "cachename", key = "#root.methodName")
public ResponseEntity<?> makeRequest(@RequestHeader("header-name") String headerName) {
this.authConfig.headerCheck(headerName);
/*
code
*/
}
我已经使用了 header "Cache-Control:no-cache" 但没有解决我的问题。
提前致谢。
Edit1:方法“headerCheck”只是检查它是否等于另一个字符串或不为空。
找到解决方案:
创建一个实现 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");
}
}
我正在尝试将缓存(咖啡因)与 Spring 引导一起使用,但我遇到了问题。我需要在每次调用中检查 header“header-name”,但应用程序正在缓存它,因此在第一次使用正确的 header 请求后,不管我发送什么 header 和应用程序不会检查它,只是从缓存中返回数据,无论如何我可以强制 spring 检查 header 然后从缓存中获取数据吗?
@GetMapping("/request-a")
@Cacheable(cacheNames = "cachename", key = "#root.methodName")
public ResponseEntity<?> makeRequest(@RequestHeader("header-name") String headerName) {
this.authConfig.headerCheck(headerName);
/*
code
*/
}
我已经使用了 header "Cache-Control:no-cache" 但没有解决我的问题。
提前致谢。
Edit1:方法“headerCheck”只是检查它是否等于另一个字符串或不为空。
找到解决方案:
创建一个实现 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");
}
}