java - 使用 JAX-WS 的 SOAP header (服务器端)

标签 java web-services soap jax-ws

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

@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。看起来不太好。我正在寻找我们是否可以将此 ApplicationCredential 类包含在 BaseRequest 类中并在那里提到它将成为 Soap Header 的一部分(通过一些注释),这将非常有帮助。例如:

public class BaseRequest
{

@SomeAnnotation which states that Appcedential is a part of Soap Header
ApplicationCredential appcredential;

}

到目前为止,我找不到任何方法来做到这一点。任何帮助将不胜感激。

最佳答案

我知道您很久以前就问过这个问题,您自己可能已经发现了,但我还是回答了这个问题:尽量避免为 Web 服务创建您自己的身份验证握手 - 而是使用任一 Web 服务消息级别如果您的服务器和客户端提供安全性,或者仅使用传输级安全性,例如基本身份验证和/或 SPNEGO。

身份验证机制的选择主要取决于您的环境:如果您在公司网络内提供服务,则使用那里提供的任何服务,或者如果没有中央身份验证基础设施,则使用基本身份验证。如果您向 Internet 提供 Web 服务,最简单的身份验证方法仍然是基本身份验证(通过 SSL),但这同样取决于您设想的服务消费者类型。

我想这个答案会引发更多问题,对此我深表歉意。我的主要观点是你不应该再次尝试重新发明轮子 =:-)

关于java - 使用 JAX-WS 的 SOAP header (服务器端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380761/

相关文章:

java - 在亚马逊云上使用 Java Web 服务

python - ServiceNow - 如何使用 SOAP 下载报告

java - SOAP 消息生成器

java - setImageResource() 返回 null

html - 可以使用哪些技术和协议(protocol)来允许 c 程序启动并与 Web 服务器交互?

java - 通过Eclipse制作自定义Android键盘教程;有关 R 引用的错误不会消失

asp.net-mvc - 我如何从 MVC3 Razor Controller 调用 web 服务?

java - SOAP SSL 握手

java - HashMap 不会按照默认值重新哈希

java - 程序应在 Textfield 更改其文本后等待