2008-10-03 6 views
3

Я выставил несколько веб-сервисов в нашем продукте, используя Java и WS-Security. Один из наших клиентов хочет использовать веб-сервис с помощью ColdFusion. Поддерживает ли ColdFusion WS-Security? Могу ли я обойти это, написав Java-клиент и используя его в ColdFusion?Как создать клиент веб-службы ColdFusion, который использует WS-Security?

(Я мало знаю о ColdFusion).

ответ

5

Я предполагаю, что вы хотите передать безопасность как часть заголовка SOAP. Вот пример того, как подключиться к сервису .Net. Тот же подход должен применяться с 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)> 

Надеюсь, это то, что вам нужно.

+0

Мне нужно попробовать это. Благодаря! – ScArcher2 2009-08-24 03:03:11

1

Я никогда не делал каких-либо WS-Security, и не знаю, если ColdFusion может потреблять его или нет, но ответить на ваш вопрос второстепенный:

Могу ли я получить вокруг него путем записи java-клиент и использование этого в coldfusion?

Да, абсолютно. ColdFusion может легко использовать объекты и методы Java.

1

Я уже некоторое время изучаю WS-Secuirty и ColdFusion и могу сказать, что приведенный выше пример не является реализацией WS-Security. Несмотря на то, что имя пользователя и пароль отправляются в заголовке, они отправляются в виде открытого текста. Использование SSL поможет, но WS-Security - это намного больше, чем просто применение этого кода. ColdFusion изначально не поддерживает WS-Security, но может легко использовать объекты и методы Java. Существует пакет от Apache под названием WSS4J, который предоставляет средства для реализации WS-Security на Java. Вы можете написать обертку, а затем использовать ее в ColdFusion. Я, честно говоря, смог это сделать, однако на стороне ColdFusion должно быть небольшое изменение конфигурации, с которыми у меня возникают проблемы.

Если кто-то может помочь мне в части конфигурации, я бы очень признателен.

Дмитрий

2

Это, вероятно, более точным, чтобы произвести «простой» заголовок XML-мыло. В приведенном выше примере отсутствует несколько строк.

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);