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

Spring Boot中如何禁用嵌入式Tomcat的无尾斜杠请求重定向?

解决Spring Boot嵌入式Tomcat禁用尾斜杠重定向问题

我之前也碰到过一模一样的需求——就是不想让不带尾斜杠的请求被自动重定向到带尾斜杠的地址,宁愿返回404也不要302跳转。嵌入式Tomcat的配置确实和独立部署的Tomcat有点区别,不过有两种简单可行的方法可以实现:

方法一:使用Spring Boot配置属性(推荐,适用于Spring Boot 2.2+)

Spring Boot从2.2版本开始,已经把Tomcat的mapperContextRootRedirectEnabled参数封装成了原生配置属性,直接在配置文件里设置就行:

application.properties

# 禁用上下文根的尾斜杠重定向
server.tomcat.mapper-context-root-redirect-enabled=false

application.yml

server:
  tomcat:
    mapper-context-root-redirect-enabled: false # 禁用上下文根的尾斜杠重定向

这个配置直接对应Tomcat原生的mapperContextRootRedirectEnabled参数,设置为false后,访问不带尾斜杠的上下文根(比如http://server/context-name)就会返回404,而不是302重定向到带尾斜杠的地址。

方法二:自定义Tomcat上下文配置(适用于所有Spring Boot版本)

如果你用的是Spring Boot 2.2之前的版本,或者需要更灵活的定制,可以通过自定义TomcatServletWebServerFactory来修改Tomcat的上下文设置:

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatCustomConfig {

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatContextCustomizer() {
        return factory -> {
            factory.addContextCustomizers(context -> {
                // 禁用上下文根的尾斜杠重定向
                context.setMapperContextRootRedirectEnabled(false);
                
                // 可选:如果想禁用所有路径的尾斜杠重定向(比如/foo -> /foo/),可以添加下面这行
                // context.setMapperRedirectEnabled(false);
            });
        };
    }
}

这里通过WebServerFactoryCustomizer来定制Tomcat的上下文,setMapperContextRootRedirectEnabled(false)专门关闭上下文根的重定向逻辑;如果需要禁用所有路径的尾斜杠重定向,就把setMapperRedirectEnabled(false)也加上。

设置完成后重启应用测试,原来的302重定向就会变成404响应,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Gert-Jan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:09:56