测试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
相关产品推荐
相关产品推荐

