有人可以给我提供代码示例,以编写针对使用HTTPS进行保护的控制器的集成测试吗?使用HTTP可以写,但是使用HTTPS可以得到认证错误。
控制者
@RestController @RequestMapping("/rest/otm/v1") public class LoginController { @Autowired UserAuthenticationService userAuthService; @ExceptionHandler({ AuthenticationFailedException.class}) @RequestMapping(value = "/login", method = RequestMethod.POST) @ResponseBody public void login(HttpServletRequest request,HttpServletResponse response) throws AuthenticationDeniedException { //some code } }
测试班
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @IntegrationTest("server.port:0") public class IdentityControllerTest { @Value("${local.server.port}") int port; @Test public void test_Login_Controller() { SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory(); Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("some-proxy", 8080)); clientHttpRequestFactory.setProxy(proxy); RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory); HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("credential", "pratap"); requestHeaders.set("deviceid", "xyz123"); HttpHeaders response = restTemplate.postForObject("https://localhost:"+port+"/rest/otm/v1/login", requestHeaders, HttpHeaders.class); } }
错误
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://localhost:51184/rest/otm/v1/login":sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:607) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557) at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:357) at com.bosch.inl.otm.controller.IdentityControllerTest.test_Login_Controller(IdentityControllerTest.java:45)
提前致谢
如果使用自签名证书,通常会报告此错误。默认情况下,Java不信任它,因此您必须禁用证书验证或将证书添加到信任存储区。两种解决方案都在这里进行了描述。