发送查询参数时POST请求发生I / O错误

时间:2018-12-28 09:13:50

标签: java post http-post resttemplate query-parameters

我正在使用以下代码通过两个查询参数来命中POST请求。 我的POSTMAN URL看起来像这样:https://example.com/xyz?username=john.doe&target_site=mysite。在POSTMAN上使用POST方法命中此URL可以正常工作。不知道为什么从Java执行此操作时会出错。

            UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl("https://example.com/xyz");
            Map<String, String> criteria = new HashMap<>();
            criteria.put("username",  "john.doe");
            uriBuilder.queryParam("username", "{username}");
            criteria.put("target_site", "mysite");
            uriBuilder.queryParam("target_site", "{target_site}");
            ParameterizedTypeReference<Object> responseType = new ParameterizedTypeReference<Object>() {
            };
            ResponseEntity<Object> response =
            restTemplate.exchange(
            uriBuilder.build().toUriString(),
            HttpMethod.POST,
            null,
            responseType,
            criteria);
            System.out.println(response.getBody());

出现以下错误:

Exception in thread "main" org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://example.com/xyz": 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:743)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:690)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:617)
    at com.mfsi.appbuilder.AppBuilderApplication.main(AppBuilderApplication.java:49)
Caused by: 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 sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
    at sun.security.ssl.Handshaker.processLoop(Unknown Source)
    at sun.security.ssl.Handshaker.process_record(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
    at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76)
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:734)
    ... 3 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
    at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
    at sun.security.validator.Validator.validate(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
    ... 18 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
    at java.security.cert.CertPathBuilder.build(Unknown Source)
    ... 24 more

1 个答案:

答案 0 :(得分:0)

您需要配置JSSE系统属性,特别是指向客户端证书存储。

通过命令行:

<?php
$connection =mysql_connect("localhost","user_name","password");
$database=mysql_select_db("db_name");
if(isset($_SESSION["message1"]))
		{
			echo "<script language='javascript'> alert('{$_SESSION['message1']}'); </script>";
		}
?>

或通过Java代码:

java -Djavax.net.ssl.trustStore=truststores/client.ts com.progress.Client

有关更多信息,请参见RedHat网站上的详细信息。