如何确定请求是否适用于Spring中的静态资源?

时间:2018-04-04 23:04:15

标签: java spring httprequest

我正在编写一个记录器来记录Spring中的每个请求,但我不想记录任何静态资源,如CSS,JS,图像或类似的东西。

我考虑过只检查扩展,但有些情况下静态内容文件没有扩展名,我不想记录它们。我也可以检查标题,但我希望记录器尽可能快,我必须做一些字符串比较或解析,如果可能的话我想避免,因为这个(和将来的)应用程序将处理大量的请求。

我基本上希望记录任何非静态资源请求,因为我可能希望在Web服务和前端应用程序中使用相同的记录器。

那么有没有办法判断一个请求是否属于静态资源?我知道Spring特别需要映射到资源处理程序。有没有办法知道请求是否以某种方式由资源处理程序处理?

1 个答案:

答案 0 :(得分:0)

所以我能够使用Spring的MediaType.parseMediaTypes(String)

以相当干净的方式解决这个问题

我可以通过检查请求标头中的“accept”字段来假设请求类型。我确定了MediaType可接受的内容,然后将它们放在HashSet中,例如

mediaTypeSet.add(MediaType.TEXT_HTML)

然后我只是迭代parseMediaType的结果,以确定它是否是我想记录的请求。

boolean shouldLog(HttpServletRequest request){
  String acceptHeader = request.getHeader("accept");
  if(acceptHeader != null){
     List<MediaType> mediaTypes = MediaType.parseMediaTypes(acceptHeader);
     for(MediaType mediaType : mediaTypes){
        if(mediaTypeSet.contains(mediaType)) return true;
     }
  }
  return false;
}

在某些情况下,accept标头会读取*/*,所以它会有所期待,但就我而言,我感兴趣的请求都定义了MIME类型。