簡體   English   中英

如何確定Spring中是否請求靜態資源?

[英]How can I determine if a request is for a static resource in Spring?

我正在寫一個記錄器來記錄Spring中的每個請求,但是我不想記錄任何靜態資源,例如CSS,JS,圖像或任何類似的東西。

我考慮過僅檢查擴展名,但是在某些情況下靜態內容文件沒有擴展名,並且我不想記錄它們。 我也可以檢查標頭,但我希望記錄器盡可能快,並且我必須進行某種字符串比較或解析,如果可能的話,我希望避免這種情況,因為此(和將來的)應用程序將處理大量的請求。

我基本上希望記錄不是靜態資源請求的任何內容,因為我可能希望在Web服務以及前端應用程序中使用相同的記錄器。

那么有沒有辦法判斷請求是否請求靜態資源? 我知道Spring特別需要映射到資源處理程序。 有什么方法可以知道請求是否已由資源處理程序處理?

所以我能夠使用Spring的MediaType.parseMediaTypes(String)以一種非常干凈的方式解決此問題

通過檢查請求標頭中的“接受”字段,我可以假定請求類型。 我確定了可以接受的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類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM