Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从web服务(JAX-WS)中访问用户名/密码?_Java_Web Services_Jax Ws_Ws Security - Fatal编程技术网

Java 从web服务(JAX-WS)中访问用户名/密码?

Java 从web服务(JAX-WS)中访问用户名/密码?,java,web-services,jax-ws,ws-security,Java,Web Services,Jax Ws,Ws Security,我们正在实现一个web服务,它将充当客户端和另一个应用程序之间的中介层。我们对web服务的要求表明,我们需要使用标准WS-Security在SOAP头中发送用户名和密码 web服务实现需要获取通过方法调用传入的信息,并将其与用户名和密码结合起来,以便调用另一个应用程序,这就是我的问题开始的地方 在我的web服务实现中,我想不出一种从SOAP头获取用户名和密码的简单方法。我可以通过注入的WebServiceContext找到用户主体(用户名),但我看不到任何简单的方法来获取密码 我可以访问SOAP

我们正在实现一个web服务,它将充当客户端和另一个应用程序之间的中介层。我们对web服务的要求表明,我们需要使用标准WS-Security在SOAP头中发送用户名和密码

web服务实现需要获取通过方法调用传入的信息,并将其与用户名和密码结合起来,以便调用另一个应用程序,这就是我的问题开始的地方

在我的web服务实现中,我想不出一种从SOAP头获取用户名和密码的简单方法。我可以通过注入的WebServiceContext找到用户主体(用户名),但我看不到任何简单的方法来获取密码

我可以访问SOAPHeader,可能还可以解析XML来获取password元素,但这似乎是解决这个问题的一种非常混乱的方法


我对JAX-WS和WS-Security的了解不如我希望的那么多。我希望我遗漏了一些对其他人来说显而易见的东西——也许我需要实现某种处理程序?

最简单的方法是通过将用户名和密码指定为JAX-WS方法的参数,从SOAP头中提取用户名和密码:

@WebMethod
public String performAction( @WebParam(name="credentials", header=true)
                             Credentials credentials,
                             @WebParam( name="...")....
您还可以创建SOAPHandler:

public class AuthenticationHandler implements SOAPHandler<SOAPMessageContext>
{
    //Implement appropriate methods here
}
public类AuthenticationHandler实现SOAPHandler
{
//在这里实现适当的方法
}
这已在standard-jaxws-endpoint-config.xml中注册:

<jaxws-config xmlns="urn:jboss:jaxws-config:2.0" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xmlns:javaee="http://java.sun.com/xml/ns/javaee"
              xsi:schemaLocation="urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd">
   <endpoint-config>
      <config-name>WebService Endpoint</config-name>
      <pre-handler-chains>
         <javaee:handler-chain>
            <javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>
            <javaee:handler>
                <javaee:handler-name>AuthHandler</javaee:handler-name>
                <javaee:handler-class>com.example.AuthenticationHandler</javaee:handler-class>
            </javaee:handler>
         </javaee:handler-chain>
      </pre-handler-chains>
   </endpoint-config>
</jaxws-config>

Web服务端点
##SOAP11_HTTP
AuthHandler
com.example.AuthenticationHandler

这和我要找的东西一模一样。如果我使用header=true标志向我的服务方法添加一个参数,这是否会迫使任何使用webservice的客户端更改其实现,或者该参数是从header映射而来的,而客户端无需执行任何操作?