Spring Cloud 放松模板的SSL验证
WireMock允许您使用“ https” URL协议对“安全”服务器进行存根。如果您的应用程序希望在集成测试中联系该存根服务器,它将发现SSL证书无效(自安装证书的常见问题)。最好的选择通常是将客户端重新配置为使用“ http”。如果这不是一种选择,则可以要求Spring配置忽略SSL验证错误的HTTP客户端(当然,仅对测试而言如此)。
为了使此工作最小,您需要在应用中使用Spring Boot RestTemplateBuilder
,如以下示例所示:
@Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder.build(); }
您需要RestTemplateBuilder
,因为构建器是通过回调传递的,以对其进行初始化,因此此时可以在客户端中设置SSL验证。如果您使用的是@AutoConfigureWireMock
批注或存根运行程序,则这会在测试中自动发生。如果使用JUnit @Rule
方法,则还需要添加@AutoConfigureHttpClient
批注,如以下示例所示:
@RunWith(SpringRunner.class) @SpringBootTest("app.baseUrl=https://localhost:6443") @AutoConfigureHttpClient public class WiremockHttpsServerApplicationTests { @ClassRule public static WireMockClassRule wiremock = new WireMockClassRule( WireMockSpring.options().httpsPort(6443)); ... }
如果您使用的是spring-boot-starter-test
,则将Apache HTTP客户端放在类路径上,并由RestTemplateBuilder
选择它,并将其配置为忽略SSL错误。如果使用默认的java.net
客户端,则不需要注释(但不会造成任何危害)。
当前不支持其他客户端,但可能会在将来的版本中添加。
要禁用自定义RestTemplateBuilder
,请将wiremock.rest-template-ssl-enabled
属性设置为false
。
更多建议: