- 浏览: 318503 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
完善自我:
支持一下!
揭秘IT人才特点:中美印日四国程序员比较 -
悲剧了:
好文,看玩thinking in java的提到的异常处理,看 ...
高效的Java异常处理框架(转) -
yin_bp:
开源框架bbossgroups页支持组件异步方法调用哦,详情请 ...
Spring 3中异步方法调用 -
flyjava:
sun的悲哀
Apache怒了,威胁说要离开JCP
在简单 Web 服务环境中,客户机直接连接到服务器,而服务器直接对请求执行所有必需的处理。正如本系列 上一篇文章 所述,使用 SSL 提供保护的连接可以为这类环境中的大部分应用提供出色的安全性。但是,更加复杂的环境变得越来越普遍,其中涉及到使用多层服务器处理请求。在许多企业环境 中日益流行的服务编排的完整理念就是以这种方法为基础的,这与面向服务架构(SOA)的概念相同。在这些类型的环境中,必须实现更强大的 WS-Security 替代方案。
|
正如上一期文章所述,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
策略)或消息(针对签名策略)中引用,以粗体显示所有策略。
<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 配置的策略添加到服务器定义。
// 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 签名和加密 ” 相同的策略,现在被提取到一个独立的策略文档中。
<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 签名和加密 ” 相同的策略,现在被提取到一个独立的策略文档中。
<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
所示(针对宽度和长度进行了编辑):
<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> |
|
在 清单 5
中,可以看到一个 Rampart 模块引用和一个服务器配置策略的副本被添加到使用 WS-Security 的两个操作的定义中,这两个操作分别为 getBooksByType
和 addBook
。这些修改将服务配置为只针对这两个操作使用 Rampart,并对 Rampart 的键和证书访问使用提供的设置。
如果构建生成的 AAR 文件并部署到一个 Axis2 服务器安装中,可以在 Administration/Available Services 页面中看到这些操作的结果,在这个页面中,将列出由服务定义的每个操作使用的模块。如果运行客户机代码并监视消息交换(使用 TCPMon 之类的工具,像 “Axis2 WS-Security 基础 ” 中描述的那样),您会看到安全处理将按照我们的期望运行:
-
getBook
消息中不存在 WS-Security 头部 -
getBooksByType
请求消息中有一个包含UsernameToken
的 WS-Security 头部 -
addBook
请求(而不是响应)消息中有一个包含签名的 WS-Security 头部
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
发表评论
-
WS-I闭关,这对WS-*意味着什么?
2010-11-15 21:19 957观点 :Web Services互操作组织(WS-I) 刚 ... -
EDA 和 SOA 的融合以及实践
2010-11-08 09:55 1047EDA 和 SOA SOA 简介 ... -
REST vs. SOAP
2010-11-04 17:08 1795看起来在web API协议之争(如果曾经有过)中,潮流正稳步的 ... -
SOA分析和设计中的错误处理要点
2010-10-24 23:51 1106在SOA分析和设计阶段进行全面的错误处理需求分析对于正确完成设 ... -
WebSphere Message Broker 开发和部署最佳实践
2010-10-23 18:24 2334简介: 本文以多个客户企业的经验为基础,给出了使用 Web ... -
带附件的 SOAP 消息
2010-09-30 15:16 1327简介: 本 文介绍了一种在 MIME Multipa ... -
利用 Geronimo 2.2 创建安全的 Web Service 应用
2010-09-30 14:49 1032简介: 随着 Web Service ... -
大学内的云计算解决方案
2010-09-29 14:16 1749本文通过使用一个 Virtual Computing Lab ... -
整合 WebSphere ILOG JRules 与 IBM Content Manager Enterprise Edition
2010-09-28 10:30 2219简介: 自动决策在内 ... -
评估企业是否适合开发复合业务服务
2010-09-27 17:01 1069本文介绍如何评估一个 ... -
集成 IBM 元数据存储库,第 2 部分: 在 WebSphere Service Registry and Repository 中治理元数据生命周期
2010-09-27 16:55 1102通过将您的应用程序与 IBM® Rational® Asset ... -
集成 IBM 元数据存储库,第 1 部: APIs for accessing Rational Asset Manager
2010-09-27 16:52 973通过将您的应用程序与 IBM® Rational® Asset ... -
不使用客户端证书的 WS-Security
2010-09-27 15:42 1351许多 WS-Security 配置要 ... -
CXF 性能比较
2010-09-27 15:15 1702Apache CXF Web 服务栈建立在与本系列早期文章讨论 ... -
通过 CXF 使用 WS-Security
2010-09-27 15:11 2798与 本系列 前面的文章 ... -
CXF 简介
2010-09-27 15:07 4366Apache CXF Web 服务堆栈是来自 Apache ... -
比较 Metro 与 Axis2 性能
2010-09-27 15:04 1147Metro Web 服务堆栈是基于 ... -
Metro 服务下的 WS-Security
2010-09-27 15:00 1332本文展示如何通过 Metro 来使用和配置 WS-Securi ... -
Metro 简介
2010-09-27 14:52 1995Metro Web 服务栈是由 Sun M ... -
Axis2 中的 JAXB 和 JAX-WS
2010-09-27 10:38 1725早期的 Apache Axis 建立在第一个面向 Web 服务 ...
相关推荐
SSL虽然提供了传输层的安全性,但其局限在于无法提供端到端的保证,并且无法针对XML消息进行细粒度的操作。WS-Security则位于OSI模型的应用层,直接作用于SOAP消息之上,使得安全性与传输层无关,更符合Web Service...
- 当需要在应用程序层面实现更细粒度的安全控制时。 - **优点:** - 提供了更高的灵活性。 - 可以根据具体的应用需求定制安全策略。 - **缺点:** - 实现相对复杂。 - 需要额外的开发工作。 **3. 消息级安全性...
XFire支持WS-Security,并允许开发者实施细粒度的权限控制。XFireClientGen.xml文件可能是用于配置客户端生成器,帮助开发者自动生成能够与XFire服务交互的客户端代码,同时可能包含了关于权限设置的信息。 三、...
- **Expression-Based Access Control (EBAC)**:基于表达式的访问控制,允许使用SpEL(Spring Expression Language)进行细粒度的权限控制。 - **Access Control Lists (ACLs)**:支持对象级别的权限控制,可以为...
通过WS-Security,Web服务可以确保消息的机密性、完整性、非否认性,以及执行细粒度的授权策略。 此外,实现Web服务安全模型还需要综合运用其他技术和协议,如X.509证书进行身份验证,SSL/TLS协议保证传输层的安全...
- **方法级安全**:在方法级别上实现细粒度的访问控制。 - **基于注解的安全性**:使用注解来指定安全约束。 - **自定义安全配置**:开发者可以根据需求定制安全配置。 #### 最佳实践 - **最小权限原则**:只...
这种访问控制组件能够为服务提供细粒度的授权策略,以适应不断变化的业务环境。 最后,论文通过Python编程语言,结合RSA加密算法,实现了XML加密传输的过程。RSA是一种广泛使用的非对称加密算法,能够确保数据在...
- **@GetMapping、@PostMapping等**:针对HTTP方法的更细粒度的映射。 3. **API设计示例**: - `/dashboard`:获取仪表板的概览信息,可能用GET方法。 - `/dashboard/data`:获取仪表板的详细数据,可能需要提供...
- **WS-Security**:利用WS-Security规范可以在SOAP消息级别实现更细粒度的安全控制。 ### 四、常见问题与解决办法 - **部署失败**:检查WAR文件是否正确放置于Tomcat的webapps目录下,并确保Tomcat服务器正常启动...
Java EE允许通过角色映射的方式实现细粒度的授权管理。 - **身份管理(Identity Management)**:处理用户账户、组、角色等信息的管理过程。Java EE提供了灵活的身份管理机制,支持自定义身份存储。 ##### 2. ...
JBoss提供了细粒度的安全控制,包括用户认证、角色授权和访问控制。可以通过Jaas配置安全域,或者使用Spring Security等第三方库进行扩展。 7. **集群与高可用性** JBoss支持多服务器集群,可以实现负载均衡和...
此外,结合Spring Security等框架,我们可以进一步实现细粒度的权限控制,比如基于角色的访问控制(RBAC)。 总结起来,"CXF WebService带有拦截器"的实践是Web服务开发中的一个重要方面,它允许我们在不侵入核心...
但SSL/TLS不支持Web Services的复杂安全需求,如细粒度的权限控制。 ### 五、PKI与Web Services的融合 PKI与Web Services Security的结合,可以通过以下方式实现: 1. **证书集成**:将数字证书作为服务提供者和...
2. 文档结构和数据字段的优化:HL7V3.0将信息分割为更细粒度的消息(Message)、段(Segment)和数据字段(DataField),以便于数据的组织和处理。这种结构化的方法大大提高了信息交换的准确性和灵活性。 3. 引用...
此外,OPC UA还支持角色基访问控制(RBAC)和细粒度的权限管理。 **4. OPC UA信息模型** OPC UA的信息模型是一种强大的工具,用于组织和结构化设备或系统中的数据。它包括节点、对象、变量、方法和数据类型,这些元素...
- **访问控制**:实施细粒度的权限管理,限制对特定资源的访问。 - **安全通信协议**:使用HTTPS、TLS等协议提供端到端的安全通信。 - **审计和日志记录**:监控和记录服务交互,以便于检测异常行为并进行事后分析。...
可以通过HTTPS提供加密,使用WS-Security标准实现消息的安全传输,或者结合Spring Security框架进行细粒度的访问控制。 10. **示例代码**:压缩包中的`examples`目录很可能包含了与教程相关的Java源代码和配置文件...
这样可以实现更细粒度的控制,提高代码的可测试性和可维护性。 整合步骤如下: 1. **引入依赖**:首先,在项目中添加CXF和Spring的相关依赖。如果是Maven项目,可以在pom.xml文件中添加对应的依赖项。确保包含CXF...
- **Message**:在消息级别提供安全,可以实现更细粒度的安全控制。 - **TransportWithMessageCredential**:结合了传输层安全和消息级安全。 - **TransportCredentialOnly**:仅处理客户端身份验证,但不提供数据...
- **权限控制**: 通过配置权限控制器(Permission Controller)来实现对资源访问的细粒度控制。 #### 7. 企业级应用配置 - **EJB配置**: 在`jboss-ejb3.xml`文件中配置EJB服务。 - **事务管理**: 支持本地事务和...