`

WS-Security 的细粒度使用

    博客分类:
  • SOA
阅读更多

在简单 Web 服务环境中,客户机直接连接到服务器,而服务器直接对请求执行所有必需的处理。正如本系列 上一篇文章 所述,使用 SSL 提供保护的连接可以为这类环境中的大部分应用提供出色的安全性。但是,更加复杂的环境变得越来越普遍,其中涉及到使用多层服务器处理请求。在许多企业环境 中日益流行的服务编排的完整理念就是以这种方法为基础的,这与面向服务架构(SOA)的概念相同。在这些类型的环境中,必须实现更强大的 WS-Security 替代方案。

关于本系列

Web 服务构成了 Java™ 技术在企业计算应用中的关键部分。在 本系列文章 中,XML 和 Web 服务顾问 Dennis Sosnoski 介绍了对于使用 Web 服务的 Java 开发人员来说比较重要的主要框架和技术。通过跟随本系列的学习,您将了解到该领域的最新进展,并且知道如何使用它们来为您的编程项目提供帮助。

正如上一期文章所述,WS-Security 带来了沉重的性能代价。降低成本的方法之一就是针对由服务定义的各个操作甚至是消息设置合适的 WS-SecurityPolicy,而不是将单个 WS-Security 策略应用到整个服务。WS-Security 的细粒度使用要求考虑更多的内容,而不是使用一成不变的方法,但是如果得到正确应用的话,那么就可以减少常用操作的性能开销,同时不会减弱需要 WS-Security 的操作的安全性。

定义策略

本文使用的样例策略与 “Axis2 WS-Security 基础 ” 和 “Axis2 WS-Security 签名和加密 ” 中的策略相同 — 一个简单的库管理服务。(参见 下载 小节,获得本文的完整源代码)。这个服务定义了三种操作:

  • getBook ,检索由 International Standard Book Number (ISBN) 标识的特定图书的细节。
  • getBooksByType ,检索某一类型的所有图书的细节。
  • addBook ,向库中添加一本新书。

为了向安全用例中添加一些有趣的变化,本文作出以下假设:

  • getBook 操作可以安全地公开给任何人(未应用安全性)。
  • getBooksByType 需要授权(因此要使用 UsernameToken )。
  • addBook 操作需要一个审计跟踪,以跟踪是谁添加了图书(通过对请求消息进行签名实现)。

在早期文章中,您已经了解了如何配置 Axis2/Rampart:将一个 WS-SecurityPolicy 文档连接到 org.apache.axis2.client.ServiceClient 实例(在客户机端),或者将策略文档嵌入到 services.xml 服务配置(在服务器端)。这个方法可以奏效,并且可用于测试,但是对于生产应用来说,最好通过将 WS-SecurityPolicy 内嵌到 WSDL 文档将其直接关联到服务定义。WS-Policy 和 WS-SecurityPolicy 旨在为这种嵌入提供支持,并且使用来自 <wsdl:binding><wsdl:binding> /<wsdl:operation><wsdl:binding> /<wsdl:operation>/<wsdl:message> 定义的引用标识将被应用到绑定、操作或消息的相应策略。Axis2 1.4.1 实现对内嵌在 WSDL 中的策略的初始处理,而这个实现在当前的 Axis2 1.5 发行版代码中得到了改进。为了演示策略在 WSDL 中的使用,本文结合使用了 Axis2 1.5 发行版代码和尚未发行的最新 Rampart 代码(后者最终会作为 Rampart 1.5 发布)。

清单 1 展示了示例应用程序的 WSDL,其中添加了策略,并在相应的位置中引用。(清单 1 针对长度和宽度进行了编辑;完整的 WSDL 可以从 代码下载 中的 library.wsdl 文件获得)。每个策略定义了一个 Id 值,该值随后从相应的操作(针对 UsernameToken 策略)或消息(针对签名策略)中引用,以粗体显示所有策略。


清单 1. 具有细粒度安全策略的 WSDL

				
<wsdl:definitions targetNamespace="http://ws.sosnoski.com/library/wsdl"
    xmlns:wns="http://ws.sosnoski.com/library/wsdl"
    xmlns:tns="http://ws.sosnoski.com/library/types"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/">

  <!-- Policy for signing message, with certificate from client included in each
    message to server -->
  <wsp:Policy wsu:Id="SignOnly" xmlns:wsu=

      "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
      xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
    <wsp:ExactlyOne>
      <wsp:All>
        <sp:AsymmetricBinding
            xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
          <wsp:Policy>
            <sp:InitiatorToken>
              <wsp:Policy>
                <sp:X509Token sp:IncludeToken=".../IncludeToken/AlwaysToRecipient"/>
              </wsp:Policy>
            </sp:InitiatorToken>
            ...
          </wsp:Policy>
        </sp:AsymmetricBinding>
        <sp:SignedParts
            xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
          <sp:Body/>
        </sp:SignedParts>

      </wsp:All>
    </wsp:ExactlyOne>
  </wsp:Policy>

  <!-- Policy for UsernameToken with plaintext password, sent from client to
    server only -->
  <wsp:Policy wsu:Id="UsernameToken" xmlns:wsu=

      "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
      xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
    <wsp:ExactlyOne>
      <wsp:All>
        <sp:SupportingTokens
            xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
          <wsp:Policy>
            <sp:UsernameToken sp:IncludeToken=".../IncludeToken/AlwaysToRecipient"/>
          </wsp:Policy>
        </sp:SupportingTokens>
      </wsp:All>
    </wsp:ExactlyOne>
  </wsp:Policy>
  ...
  <wsdl:binding name="LibrarySoapBinding" type="wns:Library">

    <wsdlsoap:binding style="document"
      transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="getBook">
      <wsdlsoap:operation soapAction="urn:getBook"/>
      <wsdl:input name="getBookRequest">
        <wsdlsoap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="getBookResponse">
        <wsdlsoap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="getBooksByType">
      <wsp:PolicyReference
          xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
          URI="#UsernameToken"/>

      <wsdlsoap:operation soapAction="urn:getBooksByType"/>
      <wsdl:input name="getBooksByTypeRequest">
        <wsdlsoap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="getBooksByTypeResponse">
        <wsdlsoap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="addBook">
      <wsdlsoap:operation soapAction="urn:addBook"/>
      <wsdl:input name="addBookRequest">
        <wsp:PolicyReference
            xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
            URI="#SignOnly"/>

        <wsdlsoap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="addBookResponse">
        <wsdlsoap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>

  </wsdl:binding>
  <wsdl:service name="library-granular">
    ...
  </wsdl:service>
</wsdl:definitions>

 

清单 1 中的策略和 WSDL 均来自早期文章,不过没有按照本文的方式事先合并。但是,您会发现策略中有一处显著的不同:早期的版本都包括了 Rampart 配置信息,这些信息特定于客户机或服务器。现在策略被嵌入到 WSDL 中,因此不适合直接包含 Rampart 配置。(您需要编辑 WSDL 以包含客户机 Rampart 配置信息,并在每次发生更改时重新生成代码,而在服务器端,Rampart 配置将被公开给访问 WSDL 的任何人)。因此示例代码将单独设置配置信息。为此,对包含的 Rampart 配置使用了之前用于策略的相同技巧的不同变体。

 

客户端使用

不管是否包含 WS-Policy,从用户的角度来看,从 WSDL 中生成代码的效果是相同的。如果查看由包含 WS-Policy 的 WSDL 生成的客户机存根的内部,将发现策略在构建时被直接连接到服务描述的组件中,但是这被隐藏在实现的内部,不会影响到客户机代码使用的接口方法。

要在客户机中利用 WS-SecurityPolicy 配置,您一定 需要在客户机代码中采取一些操作。您至少需要在与您的存根实例相关联的 org.apache.axis2.client.ServiceClient 上使用 Rampart 模块。这一步是必须的,即使您在 WSDL 中包含了 Rampart 配置信息。不幸的是,在当前的代码中,似乎没有任何方法可以在操作或消息级别使用 Rampart,因此目前与 Axis2 客户机结合使用时,细粒度 WS-Security 的一部分好处就丢失了。

如果将 Rampart 配置与 WSDL 分离,正如建议的那样,您也需要对服务描述应用这些配置。清单 2 展示了用于本样例应用程序的客户机代码。它调用 applyPolicy() 方法来将包含 Rampart 配置的策略添加到服务器定义。


清单 2. 配置客户端操作

				
// create the client stub
String target = args[0] + "://" + args[1] + ":" + args[2] + args[3];
System.out.println("Connecting to " + target);
LibraryGranularStub stub = new LibraryGranularStub(target);

// configure and engage rampart module
ServiceClient client = stub._getServiceClient();
client.getAxisService().applyPolicy(loadPolicy("rampart-client-policy.xml"));
client.engageModule("rampart");

// set the username and password for requests which use them
Options options = client.getOptions();
options.setUserName("libuser");
options.setPassword("books");

 

清单 2 中的代码根据 ServiceClient 选项设置用户名和密码,意味着这些是针对使用该服务的所有操作定义的,即使它们只用于单个操作。与将 Rampart 模块用于所有操作不同的是,以这种方式设置用户名和密码是无害的 — 这些值只有在 Rampart 需要用之构建 UsernameToken 时使用,其他情况下将会忽略。

清单 3 展示了包含有 Rampart 配置的策略文档。这里使用了与 “Axis2 WS-Security 签名和加密 ” 相同的策略,现在被提取到一个独立的策略文档中。


清单 3. Rampart 客户机配置策略

				
<wsp:Policy xmlns:wsu=
    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
  <wsp:ExactlyOne>
    <wsp:All>

      <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
        <ramp:user>clientkey</ramp:user>
        <ramp:passwordCallbackClass
          >com.sosnoski.ws.library.adb.PWCBHandler</ramp:passwordCallbackClass>
        
        <ramp:signatureCrypto>
          <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
            <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type"
              >JKS</ramp:property>
            <ramp:property name="org.apache.ws.security.crypto.merlin.file"
              >client.keystore</ramp:property>
            <ramp:property
              name="org.apache.ws.security.crypto.merlin.keystore.password"
              >nosecret</ramp:property>
          </ramp:crypto>
        </ramp:signatureCrypto>
        
      </ramp:RampartConfig>
    
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

 

代码下载中包含的 Ant build.xml 将处理从 WSDL 生成客户机和服务器代码、编译代码,以及生成服务 AAR 文件。它还会将 Rampart 配置策略(即下载中的 rampart-client-policy.xml,位于根目录)复制到客户机类路径,同时执行一些服务器端策略处理,下节将进行讨论。

服务器端使用

如果希望将服务器端 Rampart 配置与 WSDL 分离(通常是一个很不错的主意!),需要将它包含到 services.xml 文件中。在早期文章中我们执行了这个操作,以获得包括 Rampart 配置的完整 WS-SecurityPolicy 配置,并作为一个整体应用到服务。这一次,Rampart 配置策略是被添加到 services.xml 的唯一一个部分,并且是在操作级别完成的。

清单 4 展示了包含有 Rampart 配置的策略文档。与客户端的对应策略相同,这里使用了与 “Axis2 WS-Security 签名和加密 ” 相同的策略,现在被提取到一个独立的策略文档中。


清单 4. Rampart 服务器配置策略

				
<wsp:Policy xmlns:wsu=
    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
  <wsp:ExactlyOne>
    <wsp:All>

      <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
        <ramp:user>serverkey</ramp:user>
        <ramp:passwordCallbackClass
          >com.sosnoski.ws.library.adb.PWCBHandler</ramp:passwordCallbackClass>
        
        <ramp:signatureCrypto>
          <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
            <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type"
              >JKS</ramp:property>
            <ramp:property name="org.apache.ws.security.crypto.merlin.file"
              >server.keystore</ramp:property>
            <ramp:property
              name="org.apache.ws.security.crypto.merlin.keystore.password"
              >nosecret</ramp:property>
          </ramp:crypto>
        </ramp:signatureCrypto>
        
      </ramp:RampartConfig>
    
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

 

Ant build.xml 使用了一个 PolicyTool 程序 (包含在代码下载中)将 清单 4 中的策略(即下载中的 rampart-client-policy.xml,位于根目录)合并到 services.xml。修改过的 services.xml 如 清单 5 所示(针对宽度和长度进行了编辑):


清单 5. 合并后的 services.xml

				
<serviceGroup>
  <service name="library-granular">
    <messageReceivers>
      <messageReceiver class=
        "com.sosnoski.ws.library.adb.LibraryGranularMessageReceiverInOut"
        mep="http://www.w3.org/ns/wsdl/in-out"/>
    </messageReceivers>
    <parameter name="ServiceClass"
      >com.sosnoski.ws.library.adb.LibraryGranularImpl</parameter>
    <parameter name="useOriginalwsdl">true</parameter>
    <parameter name="modifyUserWSDLPortAddress">true</parameter>
    <operation mep="http://www.w3.org/ns/wsdl/in-out" name="getBook"
      namespace="http://ws.sosnoski.com/library/wsdl">
      <actionMapping>urn:getBook</actionMapping>
      <outputActionMapping>.../getBookResponse</outputActionMapping>
    </operation>
    <operation mep="http://www.w3.org/ns/wsdl/in-out" name="getBooksByType"
      namespace="http://ws.sosnoski.com/library/wsdl">
      <actionMapping>urn:getBooksByType</actionMapping>
      <outputActionMapping>.../getBooksByTypeResponse</outputActionMapping>

<module ref="rampart"/>
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu=
    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <wsp:ExactlyOne>
  <wsp:All>

    <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
    <ramp:user>serverkey</ramp:user>
    ...

    </ramp:RampartConfig>

  </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>
  </operation>
    <operation mep="http://www.w3.org/ns/wsdl/in-out" name="addBook" 
    namespace="http://ws.sosnoski.com/library/wsdl">
      <actionMapping>urn:addBook</actionMapping>
      <outputActionMapping>
        http://ws.sosnoski.com/library/wsdl/Library/addBookResponse
      </outputActionMapping>

<module ref="rampart"/>
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu=
    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <wsp:ExactlyOne>
  <wsp:All>

    <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
    <ramp:user>serverkey</ramp:user>
    ...

    </ramp:RampartConfig>

  </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>
  </operation>
  </service>
</serviceGroup>

 

将策略添加到 services.xml

Axis2 WS-Security 基础 ” 引入了一种工具,可以将模块引用和策略添加到生成的 services.xml 中,从而避免了在每次重新生成服务端代码时手动编辑文件的需要。本文使用了经过改进的工具,允许在服务配置的操作级别执行添加操作,并通过执行一次工具完成多个添加操作。改进后的版本为 com.sosnoski.ws.PolicyTool ;源代码和二进制版本位于代码 下载 中的 policytool 目录。参考该目录下的 readme.txt 文件获得指导说明。

清单 5 中,可以看到一个 Rampart 模块引用和一个服务器配置策略的副本被添加到使用 WS-Security 的两个操作的定义中,这两个操作分别为 getBooksByTypeaddBook 。这些修改将服务配置为只针对这两个操作使用 Rampart,并对 Rampart 的键和证书访问使用提供的设置。

如果构建生成的 AAR 文件并部署到一个 Axis2 服务器安装中,可以在 Administration/Available Services 页面中看到这些操作的结果,在这个页面中,将列出由服务定义的每个操作使用的模块。如果运行客户机代码并监视消息交换(使用 TCPMon 之类的工具,像 “Axis2 WS-Security 基础 ” 中描述的那样),您会看到安全处理将按照我们的期望运行:

  • getBook 消息中不存在 WS-Security 头部
  • getBooksByType 请求消息中有一个包含 UsernameToken 的 WS-Security 头部
  • addBook 请求(而不是响应)消息中有一个包含签名的 WS-Security 头部

 

Axis2/Rampart 限制

Axis2 和 Rampart 目前(也就是说,使用最新的 Axis2 1.5 发行版和一个 Rampart 夜间构建版)能够处理 WSDL 中内嵌的基本 WS-SecurityPolicy 配置,包括在操作或消息级别定义的粒度策略。然而,本文尝试的一些配置无法用于 Axis2/Rampart。例如,尝试为 addBook 操作设置 UsernameToken 策略(除了对输入消息使用签名策略外),结果将导致一个明显与 Rampart 代码加密有关的错误(即使没有使用任何加密)。从这些经验以及一些问题报告中可以判断出,Axis2/Rampart WS-SecurityPolicy 处理适合用于可以反映常见用例的简单配置,但是当应用到不常见的组合时,却容易出现错误。

另一个问题是,在服务器上使用 Rampart 产生的开销始终会出现在请求和响应处理中,即使您只对其中一条消息应用 WS-Security(像 “WS-Security 的大开销 ” 所讨论的那样)。在客户端,情况更糟糕 — 因为在客户机上使用 Rampart 目前是一种全有或全无的主张,如果在任何 操作上使用 WS-Security,那么不得不忍受每个 操作中产生的 Rampart 开销。

最后,目前的 Axis2/Rampart WS-Policy 处理并不支持策略替代方案。替代选择是 WS-Policy 设计的一个主要特点,使客户机在访问服务时可以从两个或多个可行配置中选择要使用的配置。Axis2/Rampart 策略实现并不支持这个特性,而是忽略除第一种替代选择以外的所有选择。

结束语

通过本文和前三篇文章, Java Web 服务 系列文章介绍了 Axis2/Rampart 中的 WS-Security 和 WS-SecurityPolicy 处理的所有主要方面,包括性能问题。在未来几期文章中,您将了解其他 Java Web 服务框架如何使用 WS-Security 和 WS-SecurityPolicy,但是首先需要查看 Axis2 的其他两个方面。

对于许多组织而言,一个重要的问题就是支持 Java Architecture for XML Binding (JAXB) 2.X。JAXB 2.X 是面向 XML 数据绑定的官方 Java 标准,尽管开源替代方案提供了自己独特的优势,一些组织仍然坚持使用该标准。在下一期文章中,您将看到如何结合使用 JAXB 2.X 数据绑定和 Axis2,并将它与其他受 Axis2 支持的数据绑定选择进行比较。

下载

描述 名字 大小 下载方法 本文的源代码
j-jws7.zip 29KB HTTP

原文:http://www.ibm.com/developerworks/cn/java/j-jws7.html

分享到:
评论

相关推荐

    基于XFire实施WS-Security

    SSL虽然提供了传输层的安全性,但其局限在于无法提供端到端的保证,并且无法针对XML消息进行细粒度的操作。WS-Security则位于OSI模型的应用层,直接作用于SOAP消息之上,使得安全性与传输层无关,更符合Web Service...

    web安全应用入门.docx

    - 当需要在应用程序层面实现更细粒度的安全控制时。 - **优点:** - 提供了更高的灵活性。 - 可以根据具体的应用需求定制安全策略。 - **缺点:** - 实现相对复杂。 - 需要额外的开发工作。 **3. 消息级安全性...

    WebService权限

    XFire支持WS-Security,并允许开发者实施细粒度的权限控制。XFireClientGen.xml文件可能是用于配置客户端生成器,帮助开发者自动生成能够与XFire服务交互的客户端代码,同时可能包含了关于权限设置的信息。 三、...

    spring security3.1.4

    - **Expression-Based Access Control (EBAC)**:基于表达式的访问控制,允许使用SpEL(Spring Expression Language)进行细粒度的权限控制。 - **Access Control Lists (ACLs)**:支持对象级别的权限控制,可以为...

    基于Web服务的安全模型研究.docx

    通过WS-Security,Web服务可以确保消息的机密性、完整性、非否认性,以及执行细粒度的授权策略。 此外,实现Web服务安全模型还需要综合运用其他技术和协议,如X.509证书进行身份验证,SSL/TLS协议保证传输层的安全...

    SpringOne-Using Spring Security 2

    - **方法级安全**:在方法级别上实现细粒度的访问控制。 - **基于注解的安全性**:使用注解来指定安全约束。 - **自定义安全配置**:开发者可以根据需求定制安全配置。 #### 最佳实践 - **最小权限原则**:只...

    基于soap信息通信加密传输机制研究.doc

    这种访问控制组件能够为服务提供细粒度的授权策略,以适应不断变化的业务环境。 最后,论文通过Python编程语言,结合RSA加密算法,实现了XML加密传输的过程。RSA是一种广泛使用的非对称加密算法,能够确保数据在...

    opw-ws-dashboard:仪表板客户端的 REST API

    - **@GetMapping、@PostMapping等**:针对HTTP方法的更细粒度的映射。 3. **API设计示例**: - `/dashboard`:获取仪表板的概览信息,可能用GET方法。 - `/dashboard/data`:获取仪表板的详细数据,可能需要提供...

    Axis1.4开发指南PDF版本下载.txt

    - **WS-Security**:利用WS-Security规范可以在SOAP消息级别实现更细粒度的安全控制。 ### 四、常见问题与解决办法 - **部署失败**:检查WAR文件是否正确放置于Tomcat的webapps目录下,并确保Tomcat服务器正常启动...

    GlassFish Security

    Java EE允许通过角色映射的方式实现细粒度的授权管理。 - **身份管理(Identity Management)**:处理用户账户、组、角色等信息的管理过程。Java EE提供了灵活的身份管理机制,支持自定义身份存储。 ##### 2. ...

    Jboss开发者手册

    JBoss提供了细粒度的安全控制,包括用户认证、角色授权和访问控制。可以通过Jaas配置安全域,或者使用Spring Security等第三方库进行扩展。 7. **集群与高可用性** JBoss支持多服务器集群,可以实现负载均衡和...

    CXF WebService带有拦截器

    此外,结合Spring Security等框架,我们可以进一步实现细粒度的权限控制,比如基于角色的访问控制(RBAC)。 总结起来,"CXF WebService带有拦截器"的实践是Web服务开发中的一个重要方面,它允许我们在不侵入核心...

    PKI与Web Services Security标准与应用.doc

    但SSL/TLS不支持Web Services的复杂安全需求,如细粒度的权限控制。 ### 五、PKI与Web Services的融合 PKI与Web Services Security的结合,可以通过以下方式实现: 1. **证书集成**:将数字证书作为服务提供者和...

    基于HL7V3_0的医疗数据交互研究_薛方

    2. 文档结构和数据字段的优化:HL7V3.0将信息分割为更细粒度的消息(Message)、段(Segment)和数据字段(DataField),以便于数据的组织和处理。这种结构化的方法大大提高了信息交换的准确性和灵活性。 3. 引用...

    OPC-UA-规范(part1-13).zip

    此外,OPC UA还支持角色基访问控制(RBAC)和细粒度的权限管理。 **4. OPC UA信息模型** OPC UA的信息模型是一种强大的工具,用于组织和结构化设备或系统中的数据。它包括节点、对象、变量、方法和数据类型,这些元素...

    Web服务安全性问题综述.docx

    - **访问控制**:实施细粒度的权限管理,限制对特定资源的访问。 - **安全通信协议**:使用HTTPS、TLS等协议提供端到端的安全通信。 - **审计和日志记录**:监控和记录服务交互,以便于检测异常行为并进行事后分析。...

    The Java Web Services Tutorial

    可以通过HTTPS提供加密,使用WS-Security标准实现消息的安全传输,或者结合Spring Security框架进行细粒度的访问控制。 10. **示例代码**:压缩包中的`examples`目录很可能包含了与教程相关的Java源代码和配置文件...

    WebService的CXF整合Spring

    这样可以实现更细粒度的控制,提高代码的可测试性和可维护性。 整合步骤如下: 1. **引入依赖**:首先,在项目中添加CXF和Spring的相关依赖。如果是Maven项目,可以在pom.xml文件中添加对应的依赖项。确保包含CXF...

    13学习WCF_wcf安全性

    - **Message**:在消息级别提供安全,可以实现更细粒度的安全控制。 - **TransportWithMessageCredential**:结合了传输层安全和消息级安全。 - **TransportCredentialOnly**:仅处理客户端身份验证,但不提供数据...

    JBoss实战:服务器配置指南

    - **权限控制**: 通过配置权限控制器(Permission Controller)来实现对资源访问的细粒度控制。 #### 7. 企业级应用配置 - **EJB配置**: 在`jboss-ejb3.xml`文件中配置EJB服务。 - **事务管理**: 支持本地事务和...

Global site tag (gtag.js) - Google Analytics