使用JAX-WS(服务器端)的SOAP标头

要求是在每个WebService请求中的Soap Message标头中包含安全属性。 一种方法是:

@WebService @SOAPBinding ( style = javax.jws.soap.SOAPBinding.Style.DOCUMENT, use = javax.jws.soap.SOAPBinding.Use.LITERAL ) public interface UserService { @WebMethod public AuthenticateResponse authenticateUser(AuthenticateRequest request, @webParam(header=true) ApplicationCredential appcredential); @WebMethod public UserDetailResponse getUserDetail(UserDetailRequest request, @webParam(header=true) ApplicationCredential appcredential); } 

但是,通过上述方法,我需要在每个操作中包含ApplicationCredential。 它看起来不太好。 我正在寻找是否可以在BaseRequest Class中包含这个ApplicationCredential类,并提到它将成为Soap Header的一部分(通过一些注释),这将非常有用。 例如:

 public class BaseRequest { @SomeAnnotation which states that Appcedential is a part of Soap Header ApplicationCredential appcredential; } 

到目前为止,我无法找到任何方法来做到这一点。 任何帮助将受到高度赞赏。

我知道不久之前你问了这个问题,你可能已经发现了自己,但我仍然回答:尽量避免为Web服务创建自己的身份validation握手 – 而是使用Web Service消息级安全性服务器和客户端提供它,或者只使用传输级安全性,例如基本身份validation和/或SPNEGO。

身份validation机制的选择主要取决于您的上下文:如果您在公司网络中提供服务,请使用其中提供的任何内容,如果没有中央身份validation基础结构,则使用基本身份validation。 如果您将Web服务提供给Internet,则最简单的身份validation方法是基本身份validation(通过SSL),但这又取决于您设想的服务使用者的类型。

我想这个答案会产生更多问题,对此感到抱歉。 我的主要观点是你不应该再试图重新发明轮子= 🙂