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

测试Spring Boot Eureka Server时出现404问题求助

解决Spring Boot Eureka Server身份验证测试中GET /eureka/apps返回404的问题

我来帮你排查下这个问题——你用MockMvc测试Eureka Server身份验证时,请求/eureka/apps拿到404而非预期的200,大概率是路径匹配、Servlet注册或者Security配置的问题,咱们一步步来捋:

1. 先检查Eureka端点的路径细节

Eureka Server的默认端点其实是**/eureka/apps/(注意末尾的斜杠)**,部分版本里如果不带斜杠会直接返回404。你可以先把测试里的请求路径改成带斜杠的版本试试。

另外,要是你给Eureka配置了自定义前缀(比如eureka.server.context-path=/registry),那完整请求路径得改成/registry/eureka/apps,别漏了前缀。

2. 确认MockMvc是否加载了Eureka的Servlet

Eureka Server是靠Jersey Servlet处理请求的,默认的webAppContextSetup可能没把这个Servlet注册进去。你可以试试两种方案:

  • 检查你的测试类有没有排除Eureka的自动配置类,确保@SpringBootTest包含了EurekaServerAutoConfiguration;
  • 或者改用standaloneSetup手动注册Eureka相关的控制器/Servlet,不过这种方式相对麻烦,优先推荐确保自动配置加载完整。

3. 排查Spring Security的拦截规则

既然是身份验证测试,大概率Security的配置影响了路径匹配:

  • 先检查你的Security配置类,有没有给/eureka/**路径配置正确的权限规则,比如要开启HTTP Basic认证(Eureka默认用这个):
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/eureka/**").authenticated()
            .and()
            .httpBasic();
    }
    
  • 测试时记得带上认证信息,MockMvc里可以用httpBasic方法添加头:
    mockMvc.perform(get("/eureka/apps/")
            .with(httpBasic("你的用户名", "你的密码")))
            .andExpect(status().isOk());
    
  • 还要确认你在setup方法里正确添加了Security过滤器,你的代码没写完,补全应该是这样:
    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac)
                .addFilter(springSecurityFilterChain)
                .build();
    }
    

4. 先做个基础验证

先跳过测试代码,直接启动Eureka Server,用curl或者Postman手动请求http://localhost:端口/eureka/apps/(带上认证信息),如果能拿到200,说明是测试代码的配置问题;如果手动请求也404,那就是Eureka本身的配置出问题了,比如没加@EnableEurekaServer注解,或者端口、context-path配置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:33:34