SpringBoot+OAuth+JWT集成测试遇连接拒绝错误,改端口仍未解决求助
哎,这个连接拒绝的问题在Spring Boot集成测试里真的挺常见的,你已经想到改端口了,但可能还有这些容易忽略的点:
确认测试是否正确启动了应用上下文
别以为加了测试注解就万事大吉!如果你的测试类用了@SpringBootTest但指定了webEnvironment = SpringBootTest.WebEnvironment.NONE,那应用根本不会启动嵌入式服务器。建议改用webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT——它会自动分配一个未被占用的随机端口,比手动改端口更省心,还能避免本地端口冲突。确保请求的端口和实际启动的端口完全匹配
不管是手动指定端口还是用随机端口,测试代码里的请求URL必须对应上。比如用随机端口的话,可以通过@LocalServerPort注解注入实际启动的端口:@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AuthIntegrationTest { @LocalServerPort private int serverPort; private String baseApiUrl; @BeforeEach void setUp() { baseApiUrl = "http://localhost:" + serverPort; } }要是你手动设了
server.port=8081,那请求里绝对不能还写8080,这点很容易粗心搞错。OAuth2/Spring Security配置可能阻塞了连接
你的项目用到了OAuth和Spring Security,有可能是安全配置里的规则导致服务器虽然启动了,但无法处理请求。比如强制HTTPS、未正确放行测试端点、过滤器链配置错误等。可以先临时简化Security配置(比如禁用CSRF、放开所有请求),看看能不能成功连接,逐步排查是不是安全规则在搞鬼。检查嵌入式服务器是否真的正常启动
去测试的启动日志里找找有没有类似Tomcat started on port(s): 8081 (http)的输出。如果没有,说明服务器根本没启动——那就要检查是不是缺了spring-boot-starter-web依赖,或者配置文件里有语法错误导致应用启动失败。本地端口占用或防火墙拦截
哪怕你换了端口,也可能这个新端口被其他程序占用了,或者本地防火墙阻止了测试程序访问它。可以用netstat -ano | findstr :你的端口号(Windows)或者lsof -i :你的端口号(Linux/Mac)检查端口状态,也可以暂时关闭防火墙试试能不能连接。测试客户端的配置是否正确
如果你用RestTemplate或者WebTestClient,要确保客户端配置和服务器端口匹配。比如用WebTestClient的话,直接用@AutoConfigureWebTestClient注解,它会自动绑定到启动的服务器,不用手动写端口,能避免很多人为错误。
内容的提问来源于stack exchange,提问作者Jesse James

