#web-services #coldfusion #ws-security
Вопрос:
Я представил несколько веб-сервисов в нашем продукте с использованием Java и WS-Security. Один из наших клиентов хочет использовать веб-сервис с помощью ColdFusion. Поддерживает ли ColdFusion WS-Безопасность? Могу ли я обойти это, написав Java-клиент и используя его в ColdFusion?
(Я мало что знаю о колдфузии).
Ответ №1:
Я предполагаю, что вы имеете в виду, что вам нужно передать защиту как часть заголовка SOAP. Вот пример того, как подключиться к a .Сетевое обслуживание. Тот же подход должен применяться и к Java, только URL-адреса будут другими.
<cfset local.soapHeader = xmlNew()>
<cfset local.soapHeader.TheSoapHeader = xmlElemNew(local.soapHeader, "http://someurl.com/", "TheSoapHeader")>
<cfset local.soapHeader.TheSoapHeader.UserName.XmlText = "foo">
<cfset local.soapHeader.TheSoapHeader.UserName.XmlAttributes["xsi:type"] = "xsd:string">
<cfset local.soapHeader.TheSoapHeader = xmlElemNew(local.soapHeader, "http://webserviceUrl.com/", "TheSoapHeader")>
<cfset local.soapHeader.TheSoapHeader.Password.XmlText = "bar">
<cfset local.soapHeader.TheSoapHeader.Password.XmlAttributes["xsi:type"] = "xsd:string">
<cfset theWebService = createObject("webservice","http://webserviceUrl.com/Webservice.asmx?WSDL")>
<cfset addSOAPRequestHeader(theWebService, "ignoredNameSpace", "ignoredName", local.soapHeader, false)>
<cfset aResponse = theWebService.SomeMethod(arg1)>
Надеюсь, это то, что вам было нужно.
Комментарии:
1. Мне придется попробовать это. Спасибо!
Ответ №2:
Это, вероятно, более точно для создания «простого» заголовка xml soap. В приведенном выше примере отсутствует несколько строк.
Local['soapHeader'] = xmlNew();
Local['soapHeader']['UsernameToken'] = xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken");
Local['soapHeader']['UsernameToken']['username'] = xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "username");
Local['soapHeader']['UsernameToken']['username'].XmlText = Arguments.szUserName;
Local['soapHeader']['UsernameToken']['username'].XmlAttributes["xsi:type"] = "xsd:string";
Local['soapHeader']['UsernameToken']['password'] = xmlElemNew(local.soapHeader, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "password");
Local['soapHeader']['UsernameToken']['password'].XmlText = Arguments.szPassword;
Local['soapHeader']['UsernameToken']['password'].XmlAttributes["xsi:type"] = "xsd:string";
addSOAPRequestHeader(ws, "ignoredNameSpace", "ignoredName", Local.soapHeader, false);
Ответ №3:
Я никогда не занимался ws-безопасностью и не знаю, может ли ColdFusion использовать ее или нет, но чтобы ответить на ваш второстепенный вопрос:
Могу ли я обойти это, написав java-клиент и используя его в coldfusion?
Да, безусловно. ColdFusion может легко использовать объекты и методы Java.