Solicitud JAX-WS con la autenticación básica

Lesnar:

Estoy tratando de llamar a un servicio web de SOAP mediante controladores con autorización básica pero de alguna manera API está respondiendo con 401 no autorizado.

@Override
public boolean handleMessage(SOAPMessageContext context) {
    Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    if (outboundProperty.booleanValue()) {
        String authString = parameter.getUser() + ":" + parameter.getPassword();
        try {
             Map<String, List<String>> headers = (Map<String, List<String>>)
                     context.get(MessageContext.HTTP_REQUEST_HEADERS);

             if (null == headers) {
                 headers = new HashMap<String, List<String>>();
             }

             headers.put("Authorization", Collections.singletonList(
                 "Basic " + new String(Base64.encode(authString.getBytes()))));
        } catch(Exception e) {
            log4j.error(e.getMessage(), e);
        }
    }
    return outboundProperty;
}

Cuando uso de SOAP UI y manualmente agregar el encabezado Authorziation (valor de código durante la depuración), entonces la respuesta que recibo desde el punto final, pero utilizando el código de falla a partir de ahora.

Cualquier indicador sería de gran ayuda. Gracias

Guardar:

Usted tendría que cambiar el código de la siguiente manera:

@Override
public boolean handleMessage(SOAPMessageContext context) {
    Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    if(outboundProperty.booleanValue()){
        try{
            String authString = parameter.getUser() + ":" + parameter.getPassword();
            SOAPMessage soapMessage =context.getMessage();
            String authorization = new sun.misc.BASE64Encoder().encode(authString.getBytes());
            soapMessage.getMimeHeaders().addHeader("Authorization","Basic " + authorization);   
            soapMessage.saveChanges(); 
        }catch(Exception e){
            log4j.error(e.getMessage(), e);
        }
    }
    return true;
}

Actualizado:

Como se explica aquí se debe utilizar Base64Codera partir sun.misc.BASE64Encoder()de la codificaciónauthString

Además siempre hay que volver truea partir de este método de lo contrario se bloquean el procesamiento de la cadena de controlador de solicitudes mediante la devolución false.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=212353&siteId=1
Recomendado
Clasificación