Open LanceAndersen opened 6 years ago
FULL PRODUCT VERSION :
A DESCRIPTION OF THE PROBLEM : if the Plattform Encoding is not "ISO-8859-1", the class
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe
do the wrong encoding to the Basic Auth header.
Normally the webservice client uses this code to send the credentials.
Map<String, Object> ctx = ((BindingProvider) port).getRequestContext(); ctx.put(BindingProvider.USERNAME_PROPERTY, "user"); ctx.put(BindingProvider.PASSWORD_PROPERTY, "üöä");
The Basic-Auth header must be encoded with "ISO-8859-1" but the impletation in class "com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe" does not doing this.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : step into class
take a look where "BindingProvider.PASSWORD_PROPERTY" is used.
the getBytes()-Method is called without StandardCharset.ISO_8859_1
This issue was previously reported at: https://bugs.openjdk.java.net/browse/JDK-8154861 REPRODUCIBILITY : This bug can be reproduced always.
CUSTOMER SUBMITTED WORKAROUND : // creating the header externally
Map<String, Object> ctx = ((BindingProvider) port).getRequestContext();
Map<String, List> headers=new HashMap<String, List>();
headers.put("Authorization", Arrays.asList("Basic "+DatatypeConverter.printBase64Binary("user:üäö".getBytes(StandardCharsets.ISO_8859_1))));
ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
FULL PRODUCT VERSION :
A DESCRIPTION OF THE PROBLEM : if the Plattform Encoding is not "ISO-8859-1", the class
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe
do the wrong encoding to the Basic Auth header.
Normally the webservice client uses this code to send the credentials.
Map<String, Object> ctx = ((BindingProvider) port).getRequestContext(); ctx.put(BindingProvider.USERNAME_PROPERTY, "user"); ctx.put(BindingProvider.PASSWORD_PROPERTY, "üöä");
The Basic-Auth header must be encoded with "ISO-8859-1" but the impletation in class "com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe" does not doing this.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : step into class
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe
take a look where "BindingProvider.PASSWORD_PROPERTY" is used.
the getBytes()-Method is called without StandardCharset.ISO_8859_1
This issue was previously reported at: https://bugs.openjdk.java.net/browse/JDK-8154861 REPRODUCIBILITY : This bug can be reproduced always.
CUSTOMER SUBMITTED WORKAROUND : // creating the header externally
Map<String, Object> ctx = ((BindingProvider) port).getRequestContext();
Map<String, List> headers=new HashMap<String, List>();
headers.put("Authorization", Arrays.asList("Basic "+DatatypeConverter.printBase64Binary("user:üäö".getBytes(StandardCharsets.ISO_8859_1))));
ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);