奇葩的localhost:8080/announce访问

奇葩的localhost:8080/announce访问

这是今天写spring boot程序时候遇到的奇葩问题。

首先,由于项目的静态资源我是放在如下项目的src/main/resources/static目录下面(这是使用spring boot项目默认创建的目录)

屏幕快照 2016-02-22 上午12.15.18

为了确保spring boot能够将 “http://localhost:8080/resources/css/main.css” 这样的静态文件匹配到该目录下,我在项目的application.properties添加了一行:

spring.mvc.static-path-pattern = /resources/**

这样做后,web前端就能正常访问到项目的静态资源了。但同时发现一个问题,这样做会莫名其妙的使日志系统输出o.s.web.servlet.PageNotFound告警(当用户访问不存在的页面时),默认的spring boot配置是不开启该告警的。

这个告警信息可以通过修改spring boot的logging配置来隐藏。在application.properties中添加一行:

logging.level.org.springframework.web.servlet.PageNotFound = ERROR

2016.2.23,我一开始以为是这个logging.xx.PageNotFound配置被莫名其妙修改了的原因,但后来测试了好久发现这个logging.xx.PageNotFound其实一直都是INFO级的,所以我怀疑可能是由于配置了static-path-pattern后导致mapping顺序有点不一样了,然后其中某个抛出了pagenotfound异常并输出异常了。后面再查查吧

然后,我发现Console终端时不时的弹出如下Warn

2016-02-22 00:10:46.243  WARN 6006 — [nio-8080-exec-1] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/announce] in DispatcherServlet with name ‘dispatcherServlet’

但我并没有访问http://localhost:8080/annouce呀。这肯定是那个程序在后台自己发起的访问请求,我一开始怀疑是不是tomcat或者sts搞得,但根本google不到相关信息。于是我在项目代码中添加了一个RequestMapping来尝试捕获该请求。

然后测试发现输出如下:

屏幕快照 2016-02-21 下午11.42.58

除了第一个捕获的是我自己用firefox发起的访问,其他的都跟bittorrent有关的?瞥了一眼迅雷下载,估计只能是跟这家伙有关了。关掉迅雷下载,这个访问告警就没有了。

然后google了一下bt协议,发现果然跟/announce这个页面有关,看样子是迅雷在bt下载的时候会扫描本地的http://localhost:8080/announce页面,来判断本机是否开启tracker服务。(具体tracker干嘛的就没去解了,大概是记录共同下载者的信息吧)

SO,事情算是解决了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注