WS-Security(Web服务安全性)是一种协议,可让您保护自己的soap Web服务。 发出Soap请求的客户端必须在Soap标头中提供登录名和密码。

服务器接收到肥皂请求,检查凭据并验证请求是否正确。 使用Apache Camel,可以很容易地使用肥皂网络服务(特别是如果您使用Apache CXF),但是使用WS-Security进行处理可能很棘手。

这个想法是创建一个具有所有必需信息(包括登录名和密码)的xml模板,并将该模板添加到soap标头中。

public void addSoapHeader(Exchange exchange,String soapHeader){List<SoapHeader> soapHeaders = CastUtils.cast((List<?>) exchange.getIn().getHeader(Header.HEADER_LIST));SoapHeader newHeader;if(soapHeaders == null){soapHeaders = new ArrayList<SoapHeader>();}try {newHeader = new SoapHeader(new QName("soapHeader"), DOMUtils.readXml(new StringReader(soapHeader)).getDocumentElement());newHeader.setDirection(Direction.DIRECTION_OUT);soapHeaders.add(newHeader);exchange.getIn().setHeader(Header.HEADER_LIST, soapHeaders);} catch (Exception e) {//log error}}

Apache Camel使用Exchange接口,该接口具有检索或更新标头的方法。 soapHeader参数是包含xml模板的字符串。

我们检索当前的标头,并添加一个名为soapHeader的新标头。 由于使用了DOMUtils类,我们将soapHeader属性从字符串转换为XML。

newHeader.setDirection(Direction.DIRECTION_OUT)指令意味着该标头将应用于离开消费者端点或进入生产者端点的请求(即,它适用于通过路由传播的WS请求消息)。

现在,让我们创建xml模板并调用addSoapHeader方法:

public void addWSSESecurityHeader(Exchange exchange,String login,String password){String soapHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?><wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"+ "xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"><wsse:UsernameToken wsu:Id=\"UsernameToken-50\"><wsse:Username>"+ login+ "</wsse:Username><wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">"+ password + "</wsse:Password></wsse:UsernameToken></wsse:Security>";//Add wsse security header to the exchangeaddSoapHeader(exchange, soapHeader);}

如我们所见,我们在xml中需要两个名称空间(以使用WS-Security进行处理):

  • http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
  • http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd

然后,我们可以在xml中使用有趣的标签:

  • wsse:UsernameToken:包括用户名和密码信息
  • wsse:Username:认证所需的用户名
  • wsse:Password:认证所需的密码

接下来,我们只需要调用方法addSoapHeader即可将xml添加到soap标头中。 这是完整的Apache Camel路由的完整代码:

package com.example.test;import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.camel.Exchange;
import org.apache.camel.util.CastUtils;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.headers.Header;
import org.apache.cxf.headers.Header.Direction;
import org.apache.cxf.helpers.DOMUtils;public class MyRoute extends RouteBuilder {public void addSoapHeader(Exchange exchange,String soapHeader){List<SoapHeader> soapHeaders = CastUtils.cast((List<?>) exchange.getIn().getHeader(Header.HEADER_LIST));SoapHeader newHeader;if(soapHeaders == null){soapHeaders = new ArrayList<SoapHeader>();}try {newHeader = new SoapHeader(new QName("soapHeader"), DOMUtils.readXml(new StringReader(soapHeader)).getDocumentElement());newHeader.setDirection(Direction.DIRECTION_OUT);soapHeaders.add(newHeader);exchange.getIn().setHeader(Header.HEADER_LIST, soapHeaders);} catch (Exception e) {//log error}}public void addWSSESecurityHeader(Exchange exchange,String login,String password){String soapHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?><wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"+ "xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"><wsse:UsernameToken wsu:Id=\"UsernameToken-50\"><wsse:Username>"+ login+ "</wsse:Username><wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">"+ password + "</wsse:Password></wsse:UsernameToken></wsse:Security>";//Add wsse security header to the exchangeaddSoapHeader(exchange, soapHeader);}@Overridepublic void configure() throws Exception {from("endpointIn").process(new Processor(){@Overridepublic void process(Exchange exchange) throws Exception {addWSSESecurityHeader(exchange, "login","password");}}).to("endointOut") ;}
}

翻译自: https://www.javacodegeeks.com/2014/06/adding-ws-security-over-soap-using-apache-camel.html

使用Apache Camel通过soap添加WS-Security相关推荐

  1. camel 调用soap_使用Apache Camel通过soap添加WS-Security

    camel 调用soap WS-Security(Web服务安全性)是一个协议,可让您保护自己的soap Web服务. 发出Soap请求的客户端必须在Soap标头中提供登录名和密码. 服务器接收到肥皂 ...

  2. apache camel_在WildFly中将Apache Camel和Spring添加为jboss模块

    apache camel 这些天,我在玩Wildfly , Apache Camel和Spring . 在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件. 有或没 ...

  3. 在WildFly中将Apache Camel和Spring添加为jboss模块

    这些天,我在玩Wildfly , Apache Camel和Spring . 在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件. 有或没有骆驼,有很多方法可以实现 ...

  4. 简化软件集成:一个Apache Camel教程

    本文来自于阮一峰,文章主要讲解了构建的流程,每个步骤介绍的较为详细,希望对大家有帮助. 软件很少(如果有的话)存在于信息真空中.至少,这是我们软件工程师可以为我们开发的大多数应用程序做出的假设. 在任 ...

  5. WS Security 认证方式详解

    本文参考文档如下: MSDN 官方详解 : http://www.microsoft.com/china/MSDN/library/WebServices/WebServices/HowASP.NET ...

  6. apache camel_轻量级的开源集成:Apache Camel还是Spring集成?

    apache camel 首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成 ...

  7. 轻量级的开源集成:Apache Camel还是Spring集成?

    首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成项目支持.我的专长是使用该 ...

  8. java camel dsl,Apache Camel与Spring DSL

    我正在尝试使用spring DSL在Apache Camel中运行一个简单的应用程序 . 这是我的spring-config.xml 这是我的Java类测试: public class CamelSp ...

  9. Apache Camel Test Framework(MOCK)

    http://jnn.iteye.com/blog/1327693 先说点题外话 :上周五我和几个朋友交流的时候我发现大家很少写测试,分析原因一个可能是大家认为程序还不复杂,我写测试的回报不高,还有一 ...

最新文章

  1. 一文带你了解隐马尔科夫模型
  2. OpenCV Java开发简介
  3. 一些有关使用EF的错误用法展开的思考
  4. 新服务器如何安装操作系统,新服务器如何安装操作系统
  5. lamda表达式修改数据_正则表达式学习教程
  6. HTML5期末大作业:动漫网站设计——千与千寻(10页) 含设计报告 HTML+CSS+JavaScript 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品
  7. bmp 和JPG有什么区别
  8. java多线程问题(代码示例)
  9. python自动视频剪辑_python剪切视频与合并视频的实现
  10. mysql 保存昵称_mysql 微信用户昵称emoji 完整保存
  11. ubuntu18与win10双系统引导修复
  12. POJ 1144 Network
  13. 心理学转到计算机的女科学家,从局外人到局中人心理学研究理念演变.doc
  14. 与Anthony Baldino一起塑造声音
  15. EasyPoi 实现Word文档内容替换3种情况(正常文本替换、表格文本替换、图表替换)
  16. 数据结构(王道版本,主讲人:闲鱼学长)P7-P18
  17. 卧槽!又来一个Python大数据学习神器!
  18. DevOps入门系列--前瞻性--前瞻性记忆
  19. 程序员撸码4年撸出麒麟臂和六块腹肌
  20. 秀外慧中雒芊芊:站在陈天桥背后的女人

热门文章

  1. Spring XML中如何使用 符号,比如数据库MySQL连接
  2. android之微信分享文本
  3. 法兰克服务器电源维修,发那科FANUC系统控制电源简介
  4. RabbitMQ--topic
  5. Request获取参数封装方式
  6. hello world_建立无服务器的“ Hello World”功能
  7. drools dmn_DMN 1.1 XML:从建模到使用Drools 7.0的自动化
  8. finalizer_Java Finalizer和Java文件输入/输出流
  9. javafx swing_Swing应用程序中的JavaFX 8 DatePicker
  10. spark rest_Spark简介,您的下一个REST Java框架