You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁止Tomcat处理/WEB-INF请求,让Web应用接管所有路径?

解决Tomcat拦截{myApp}/WEB-INF路径请求的问题

我之前部署Web应用时也碰到过一模一样的情况,Tomcat默认会把/WEB-INF/开头的请求拦下来返回404,要让这些请求转交给你的应用处理,可以试试下面几个可行的方案:

方法1:扩展Servlet映射(适用于Servlet/Spring MVC类应用)

如果你的应用核心是用DispatcherServlet(比如Spring MVC项目)或者自定义Servlet驱动的,直接调整映射规则,把/WEB-INF/*纳入到应用的处理范围就行:

方式A:web.xml配置

<servlet>
    <servlet-name>yourAppServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 其他初始化参数 -->
</servlet>
<servlet-mapping>
    <servlet-name>yourAppServlet</servlet-name>
    <url-pattern>/</url-pattern>
    <url-pattern>/WEB-INF/*</url-pattern> <!-- 新增这个映射规则 -->
</servlet-mapping>

方式B:Java代码配置(Spring Boot/纯Java Web项目)

@Configuration
public class WebAppConfig {
    @Bean
    public ServletRegistrationBean<DispatcherServlet> appServletRegistration() {
        DispatcherServlet servlet = new DispatcherServlet();
        // 这里把"/"和"/WEB-INF/*"都作为映射路径
        ServletRegistrationBean<DispatcherServlet> registration = new ServletRegistrationBean<>(servlet, "/", "/WEB-INF/*");
        registration.setName("yourAppServlet");
        return registration;
    }
}

配置完成后,你的应用Servlet就会接管所有/WEB-INF/开头的请求,接下来只需要在控制器里写对应的处理逻辑就行,比如Spring MVC里的@RequestMapping("/WEB-INF/**")方法。

方法2:自定义Tomcat Valve(更底层的控制)

如果不想修改Servlet映射,或者需要更灵活的请求转发逻辑,可以自定义一个Tomcat Valve来拦截请求并转交给应用:

public class WebInfForwardValve extends ValveBase {
    @Override
    public void invoke(Request request, Response response) throws IOException, ServletException {
        String requestURI = request.getRequestURI();
        // 判断请求路径是否以/WEB-INF/开头
        if (requestURI.startsWith("/WEB-INF/")) {
            // 转发到你的应用核心处理入口
            request.getRequestDispatcher("/app-core-handler").forward(request, response);
            return;
        }
        // 非目标路径继续走Tomcat默认流程
        getNext().invoke(request, response);
    }
}

然后把这个Valve配置到Tomcat的Context中(可以通过context.xml或者代码方式配置),就能让所有/WEB-INF/请求先经过这个Valve转交给你的应用处理。

注意事项

  • 尽量避免直接暴露WEB-INF下的静态资源,如果是要处理静态文件,建议把资源移到src/main/resources/static这类公开目录,或者通过专门的静态资源处理器来处理,毕竟WEB-INF原本就是Tomcat默认保护的目录。
  • 确保你的应用控制器能正确解析/WEB-INF/开头的路径,比如Spring MVC中要注意@RequestMapping的路径匹配规则是否覆盖到这类请求。

内容的提问来源于stack exchange,提问作者vagcore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:38:59