Http Basic Authentication无法使用Spring WS和WebServiceTemplate凭据

问题描述 投票:3回答:2

我尝试使用Spring(-WS)将HTTP Basic Auth凭证添加到我的SOAP-Request。请求本身有效,但未提交凭据。 HTTP标头应如下所示:

[...]
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Authorization: Basic mybase64encodedtopsecretcredentials=

但最后一行并没有丢失。在MyConfig.java中,我配置了Bean(没有XML):

@Bean
public WebServiceTemplate webServiceTemplate() {
    WebServiceTemplate template = new WebServiceTemplate();
    try {
        template.setMarshaller(marshaller());  //Jaxb2Marshaller
        template.setUnmarshaller(marshaller());

        // proxy for tcpmon inspection
        template.setDefaultUri("http://127.0.0.1:29080/target/webservice.php");
        String username = environment.getProperty("config.username");
        String password = environment.getProperty("config.password");
        Credentials credentials = new UsernamePasswordCredentials(username, password);
        HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
        sender.setCredentials(credentials);
        sender.afterPropertiesSet();
        template.setMessageSender(sender);
    } catch (Exception e) {
        // @todo: handle me
    }
    return template;
}

如果您知道缺少授权行的原因,请告诉我。 :)非常感谢你提前

java spring web-services soap spring-ws
2个回答

1
投票

this link(感谢@Milos)所述,您需要创建一个类:

public class WebServiceMessageSenderWithAuth extends HttpUrlConnectionMessageSender{

    @Override
    protected void prepareConnection(HttpURLConnection connection)
            throws IOException {

        Base64.Encoder enc = Base64.getEncoder();
        String userpassword = "login:password"; // change to a real user and password
        String encodedAuthorization = enc.encodeToString(userpassword.getBytes());
        connection.setRequestProperty("Authorization", "Basic " + encodedAuthorization);

        super.prepareConnection(connection);
    }
}

并传递给邮件发件人方法:

setMessageSender(new WebServiceMessageSenderWithAuth());
© www.soinside.com 2019 - 2024. All rights reserved.