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

Spring Boot 3.1.1配置contextPath后根路径重定向404问题求助

解决方案

当配置server.servlet.contextPath=/my-service后,Spring Boot应用的所有请求路径都会以/my-service为前缀,而你要处理的localhost:8080是服务器根路径,不属于应用的contextPath范围,因此之前的WebMvcConfigurer配置只能处理应用内部的路径(如/my-service/),无法拦截服务器根路径的请求,导致404错误。

以下是几种可行的解决方法:

方法一:通过Tomcat内置配置实现两步重定向

这种方式无需编写自定义代码,仅需配置文件和少量MVC配置:

  1. 修改application.properties,添加Tomcat根路径重定向配置:
server.servlet.contextPath=/my-service
# 开启服务器根路径到应用contextPath的重定向
server.tomcat.redirect-root-to-context-path=true
  1. 修改你的WebMVCApplicationConfig,配置应用内部根路径到/info的重定向:
@Configuration
public class WebMVCApplicationConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 匹配应用内部的根路径(即/my-service/),重定向到/my-service/info
        registry.addRedirectViewController("/", "/info");
    }
}

此时访问localhost:8080会先被Tomcat重定向到localhost:8080/my-service,再由Spring MVC重定向到localhost:8080/my-service/info。

方法二:自定义Filter直接拦截服务器根路径

如果需要一步完成重定向(避免两次跳转),可以编写自定义Filter拦截服务器根路径的请求:

import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import java.io.IOException;

@Component
public class RootRedirectFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        // 拦截服务器根路径请求
        if ("/".equals(req.getRequestURI())) {
            // 直接重定向到目标路径
            res.sendRedirect("/my-service/info");
            return;
        }
        chain.doFilter(request, response);
    }
}

添加这个Filter后,访问localhost:8080会直接跳转到localhost:8080/my-service/info,无需额外配置server.tomcat.redirect-root-to-context-path。

方法三:配置Tomcat欢迎页面实现重定向

通过自定义Tomcat容器配置,修改默认欢迎页面的行为:

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;

@Component
public class TomcatRootRedirectCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addContextCustomizers(context -> {
            // 设置欢迎页面为重定向到目标路径
            context.addWelcomeFile("redirect:/my-service/info");
        });
    }
}

这种方式利用Tomcat的欢迎页面机制,当访问服务器根路径时,自动触发重定向到目标地址。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:45:00