本文档主要讨论了SOAP协议中的SOAP Header部分以及在Apache CXF框架中如何处理认证信息。SOAP (Simple Object Access Protocol) 是一种轻量级、基于XML的协议,用于在分布式系统之间交换结构化数据。在SOAP消息中,头部(SOAP Header)用于包含与请求或响应相关的元数据,如身份验证、事务标识等。 SOAP Header 的用法涉及到以下几个关键点: 1. **SOAP Header声明**: 在CXF文档中提到的 `<soap:header>` 标签是SOAP协议的一部分,用于定义一个可选的、在SOAP消息中重复使用的头部区域。在这个例子中,`<authentication></authentication>`,`<userorgid></userorgid>`,`<userid></userid>` 和 `<userpsw></userpsw>` 是几个自定义标签,用于存储用户认证信息,如用户名、组织ID等。 2. **实现SOAPHandler**: `AuthenticationHandler` 类实现了 `SOAPHandler<SOAPMessageContext>` 接口,这是CXF中用于处理SOAP消息的回调接口。通过这个接口,开发者可以拦截并修改SOAP消息,包括头部内容。 3. **处理逻辑**: `AuthenticationHandler` 中的处理逻辑可能涉及以下几个步骤: - **检查上下文**:通过 `MessageContext` 对象获取SOAP消息上下文,以便访问消息中的相关信息。 - **解析头部**:使用 `SOAPHeader` 类来读取或创建SOAP头部,并通过 `Node` 或 `NodeList` 对象处理节点数据。 - **认证验证**:根据接收到的认证信息进行用户身份验证,可能涉及检查用户名、密码或组织ID是否匹配。 - **修改头部**:如果需要,可以在处理过程中更新或添加新的头部元素。 - **日志记录**:使用 `Log` 对象记录处理过程中的信息,有助于调试和跟踪。 4. **CXF认证机制**: CXF提供了灵活的认证处理,允许开发者自定义认证策略。`AuthenticationHandler` 可能被集成到CXF的WS-Security或类似的扩展中,以确保只有授权用户才能访问服务。 5. **使用示例**: 实现代码中导入的库(如 `javax.xml.namespace.QName`、`javax.xml.soap.SOAPBody` 等)展示了如何在处理SOAP消息时操作XML文档结构。具体到类中,可能会有对 `handleMessage()` 方法的实现,该方法在接收到SOAP消息后会被调用。 总结来说,本文档讲解了如何在Apache CXF环境中创建一个SOAP Handler来处理SOAP头部,特别是与用户认证相关的元数据。这对于构建安全的Web服务至关重要,开发者可以根据实际需求定制和扩展这个处理逻辑。
实现Webservice 中Soap Header 的用户验证
SoapHeader 中结构如下
view plaincopy to clipboardprint?
<soap:header>
<authentication></authentication>
<userorgid></userorgid>UserOrgID
<userid></userid>Hubs1
<userpsw></userpsw>password
soap:header>
采用Handler 处理链 来拦截SOAP Message 进行验证
代码实现:
view plaincopy to clipboardprint?
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* AuthenticationHandler.java
*
* @author waterborn
*/
public class AuthenticationHandler implements SOAPHandler<soapmessagecontext></soapmessagecontext> {
private static final Log log = LogFactory.getLog(AuthenticationHandler.class);
private boolean checkAuthentication(String userOrgID, String userID, String userPSW) {
log.debug("checkAuthentication : userOrgID=" + userOrgID + " , userID=" + userID + " , userPSW=" + userPSW);
boolean check = false;
if ("Hubs1".equals(userID) && "password".equals(userPSW)) {
check = true;
}
return check;
}
@SuppressWarnings("unchecked")
public boolean handleMessage(SOAPMessageContext messageContext) {
log.debug("LoggingHandler : handleMessage Called....");
Boolean outboundProperty = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (!outboundProperty) { // InBound Message
String userOrgID = "";
剩余15页未读,继续阅读
- 粉丝: 24
- 资源: 17
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全