camel 调用soap_使用Apache Camel通过soap添加WS-Security
camel 調用soap
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
camel 調用soap
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的camel 调用soap_使用Apache Camel通过soap添加WS-Security的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos打什么服务器好(ddos打什么服
- 下一篇: 使用Spring Boot Actuat