0

我正在尝试在 Spring Boot 中使用缓存(咖啡因),但我遇到了问题。我需要在每次调用中检查标头“标头名称”,但应用程序正在缓存它,因此在第一次请求正确标头后,无论我发送什么标头,应用程序都不会检查它,只是从缓存中返回数据,无论如何我可以强制spring检查标题然后从缓存中获取数据吗?

 @GetMapping("/request-a")
 @Cacheable(cacheNames = "cachename", key = "#root.methodName")
 public ResponseEntity<?> makeRequest(@RequestHeader("header-name") String headerName) {


    this.authConfig.headerCheck(headerName);

    /*
    code
    */    
 }

我已经使用了标题“Cache-Control:no-cache”并且没有解决我的问题。

提前致谢。

Edit1:方法“headerCheck”只是检查它是否等于另一个字符串或不为空。

4

1 回答 1

0

找到了解决方案:

创建一个实现 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");
 }
}
于 2021-12-23T17:16:27.163 回答