奇葩的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来尝试捕获该请求。

@Controller
public class AnnounceController {
    private static final Log logger = LogFactory.getLog(UserController.class);
    
    @RequestMapping({"announce", "announce.php"})
    public @ResponseBody String announce(HttpServletRequest request) {
        logger.info("有个混蛋在访问 " + request.getRequestURI());
        
        Enumeration<String> headers = request.getHeaderNames();
        while (headers.hasMoreElements()) {
            String header = (String) headers.nextElement();
            logger.info(header + ": " + request.getHeader(header));
        }
        
        return "哪个王八蛋在访问 " + request.getRequestURI();
    }
}

然后测试发现输出如下:

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

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

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

SO,事情算是解决了。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top