非法请求路径拦截需分层实现:Spring Boot中可自定义HandlerExceptionResolver、Filter或WebMvcConfigurer;Tomcat通过Valve校验URI;Apache httpd用mod_rewrite或mod_security过滤;须注意URL编码绕过、静态资源误判及频率限制。

Java Web应用中,Apache通常指Apache HTTP Server(作为反向代理)或Apache Tomcat(Servlet容器),而“非法请求路径拦截”实际多发生在应用层(如Spring MVC、Servlet Filter)或Web服务器层(如Apache httpd的mod_rewrite)。404本身是标准HTTP响应,表示资源未找到,并非“非法”,但可通过配置主动识别并拦截恶意、不存在或敏感路径,防止信息泄露或扫描探测。
在Spring Boot中统一拦截非法路径
Spring Boot默认对未匹配的请求返回404,但可自定义逻辑增强防护:
- 实现HandlerExceptionResolver或使用@ControllerAdvice捕获NoHandlerFoundException(需开启spring.mvc.throw-exception-if-no-handler-found=true)
- 重写WebMvcConfigurer中的configureHandlerExceptionResolvers,对404做日志记录、限流或重定向
- 添加全局Filter(如OncePerRequestFilter),在请求分发前校验URI是否符合白名单正则(例如只允许/api/**、/static/**),不匹配则直接返回403或重定向
在Tomcat中通过Valve拦截可疑路径
Tomcat的Valve机制可在请求进入Servlet前介入:
- 自定义Valve实现类(继承ValveBase),重写invoke方法,解析request.getRequestURI()
- 配置常见攻击特征:含/../、%00、.git/、WEB-INF/、重复斜杠、异常编码字符等
- 在server.xml的
或 下注册该Valve,匹配即调用response.sendError(403)或response.setStatus(404)
在Apache HTTP Server(反向代理)中用mod_rewrite过滤
若前端有Apache httpd作代理,可在VirtualHost或.htaccess中用RewriteRule主动拦截:
立即学习“Java免费学习笔记(深入)”;
- 拒绝含危险路径的请求:RewriteCond %{REQUEST_URI} \.\./ [OR]
RewriteCond %{REQUEST_URI} (\.git|WEB-INF|\.env) [NC]
RewriteRule ^ - [F](返回403) - 统一重写非法路径到兜底接口:RewriteRule ^/(?!api|static|health).*$ /error/invalid-path [R=404,L]
- 结合mod_security规则集(如OWASP CRS),自动识别SQLi/XSS路径特征并拦截
关键注意事项
拦截策略需兼顾安全与可用性:
- 避免过度拦截导致静态资源(如/favicon.ico、/robots.txt)误判;建议先记录再拦截,观察日志再上线规则
- 404本身不暴露后端技术栈,但频繁返回可能被用于路径爆破;建议配合请求频率限制(如Guava RateLimiter或Sentinel)
- 敏感路径(如/actuator)应通过Spring Security配置访问控制,而非仅靠路径拦截
- 所有拦截逻辑必须测试URL编码绕过(如/..%252f → 解码后仍为/../),确保规范化处理后再匹配

















