【问题标题】:Passing BASIC authentication data into a spring ws client将 BASIC 身份验证数据传递到 spring ws 客户端
【发布时间】:2014-07-27 07:15:38
【问题描述】:

我有一个 Web 服务,其服务器使用基本的 http 身份验证来授予访问权限

Web服务本身有自己的认证用户名和密码

设置所需参数后,可以使用 SOAP UI 访问 WS

我没有开发一个 UI 客户端,它会使用 spring 来访问 web 服务

我的问题是如何将用户在打开页面时输入的 HTTP 身份验证发送到 Web 服务器,以便他允许我访问 Web 服务

【问题讨论】:

    标签: spring web-services soap spring-ws


    【解决方案1】:

    当前的 spring ws 文档在此处有一个示例(第 6.1 章): http://docs.spring.io/spring-ws/site/reference/html/client.html#client-transports

    我引用配置中有趣的部分:

    <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
      <constructor-arg ref="messageFactory"/>
      <property name="messageSender">
        <bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
            <property name="credentials">
                <bean class="org.apache.http.auth.UsernamePasswordCredentials">
                    <constructor-arg value="john:secret"/>
                </bean>
            </property>
        </bean>
      </property>
      <property name="defaultUri" value="http://example.com/WebService"/>
    </bean>
    

    我使用的最后一个版本的 Spring WS 是不久前(1.x),但是您可以使用 Apache Commons HTTPClient API 使用 Spring WS 提供的几乎任何东西。 当使用 WSTemplate 系统时,最重要的是 WSMessageSender。但是上面建议的方法允许直接从 Spring 配置中完成所有操作。

    在您的场景中,您可以提供 UsernamePasswordCredentials 的实现,该实现要么具有回调以向用户询问凭据,要么以其他方式注入它们。

    【讨论】:

    • 在这个例子中,用户名和密码是作为纯文本发送的,在我的情况下,我需要发送用户输入的那些
    • 是的,但没有什么能阻止您按需构建 UsernamePasswordCredentials 并在您的 messageSender 实例上动态设置它。 (你的webServiceTemplate 应该是prototypebean,这样你每次都会得到一个新的,当你知道相关的配置时传递它)。另一种实现是创建您自己的 UsernamePasswordCredentials 子类,该子类执行数据库查找(或等效)以查找您实际存储它们的凭据。
    • 能否找回用户在网站开通时被要求输入的用户名和密码?
    • 可以传入您有权访问的任何内容。那么,问题是双重的:1)网站的身份验证方案是否允许您访问明文密码? (HTML 表单或 HTTP 基本方案可以,HTTP Digest 或 NTLM 不...)。如果没有,那就是“游戏结束”。 2) 如果 1 是肯定的:你如何访问这些信息?这取决于您的实现(基于容器?Spring Security ?...)。无论如何,这完全是一个不同的问题,它具有您应该注意的深层安全后果。
    • 我想这就是我想要的。谢谢@GPI
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多