【分享】Jfinal+Undertow自定义对静态资源的404错误处理

先说一下个人需求:记录所有404错误请求。之所以想记录这个错误,是因为很多对系统的渗透攻击都会触发404,很多不法份子会暴力遍历你的资源文件,比如:XXX.zip、XXX.sql等敏感文件。我的目的很简单,对于这种请求进行分析,从而自动屏蔽一些ip保证系统安全。

但是问题来了,我虽然设置了:

me.setError404View("")

但是这个操作只对action请求起作用,对静态资源的访问无效,静态资源的404被undertow捕获了,会提示你一个Not Found。然后我去undertow官网查了下如何自定义404请求,没有查到。度娘了一下,大部分都是在讲springboot。无奈,发了一篇帖子求助波总:https://www.jfinal.com/feedback/6731

上面就是整个事情的经过了,后来我一想,不对啊,我很早之前就研究过undertow啊,也研究过如何自定义错误页面,于是翻了下自己的代码,一番折腾后搞定,好了,废话不多说了,上方案。

方案很简单,我重写了下jfinal-undertow里面的一个类:com.jfinal.server.undertow.WebBuilder,就加了一个方法addErrorPage,感觉这个方法还是很有用的,建议波总后续版本加上。下面贴完整代码:

public WebBuilder addErrorPage(int errorCode,String errorPage) {
	deploymentInfo.addErrorPage(new ErrorPage(errorPage, errorCode));
	return this;
}

然后,启动代码:

UndertowServer.create(Config.class).configWeb(builder -> {			
	//错误页面
	builder.addErrorPage(404, "你的页面");

}).start();

有个这个方法之后,404啊,500啊,这些错误就都能自定义了。

评论区

JFinal

2019-11-08 20:09

比我给的方案简单方便多了,必须收藏 + 点赞

此外,这个功能已经添加到了 jfinal-undertow,代码在此:
https://gitee.com/jfinal/jfinal-undertow/commit/9f07cfeec48b4695c8e400f022a9dbb80fe6c3b3

happyboy

2019-11-08 20:56

@JFinal 波总辛苦了,^_^

山东小木

2019-11-09 00:31

点赞 收藏