要求是在每个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类中包含这个ApplicationCredential类,并在那里提到它将成为Soap Header的一部分(通过一些注释),这真的很有帮助。例如:
public class BaseRequest
{
@SomeAnnotation which states that Appcedential is a part of Soap Header
ApplicationCredential appcredential;
}
到目前为止,我找不到任何方法可以做到这一点。任何帮助将不胜感激。
最佳答案
我知道这是前一阵子,您问过这个问题,您可能已经发现了自己,但是无论如何,我都会回答:尽量避免为Web服务创建自己的身份验证握手-如果您的Web服务消息级别安全,请使用服务器和客户端提供它,或仅使用传输级安全性,例如基本身份验证和/或SPNEGO。
身份验证机制的选择主要取决于您的上下文:如果您在公司网络内提供服务,请使用那里提供的任何服务;如果没有中央身份验证基础结构,则使用基本身份验证。如果将Web服务提供给Internet,则最简单的身份验证方法是基本身份验证(通过SSL),但这又取决于您所设想的服务使用者的类型。
我想这个答案提出了更多问题,对此感到抱歉。我的主要观点是,您不应尝试重新发明轮子= :-)