我正在编写一个记录器来记录Spring中的每个请求,但我不想记录任何静态资源,如CSS,JS,图像或类似的东西。
我考虑过只检查扩展,但有些情况下静态内容文件没有扩展名,我不想记录它们。我也可以检查标题,但我希望记录器尽可能快,我必须做一些字符串比较或解析,如果可能的话我想避免,因为这个(和将来的)应用程序将处理大量的请求。
我基本上希望记录任何非静态资源请求,因为我可能希望在Web服务和前端应用程序中使用相同的记录器。
那么有没有办法判断一个请求是否属于静态资源?我知道Spring特别需要映射到资源处理程序。有没有办法知道请求是否以某种方式由资源处理程序处理?
答案 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类型。