Java 从web服务(JAX-WS)中访问用户名/密码?
我们正在实现一个web服务,它将充当客户端和另一个应用程序之间的中介层。我们对web服务的要求表明,我们需要使用标准WS-Security在SOAP头中发送用户名和密码 web服务实现需要获取通过方法调用传入的信息,并将其与用户名和密码结合起来,以便调用另一个应用程序,这就是我的问题开始的地方 在我的web服务实现中,我想不出一种从SOAP头获取用户名和密码的简单方法。我可以通过注入的WebServiceContext找到用户主体(用户名),但我看不到任何简单的方法来获取密码 我可以访问SOAPHeader,可能还可以解析XML来获取password元素,但这似乎是解决这个问题的一种非常混乱的方法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
我对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映射而来的,而客户端无需执行任何操作?