2008-10-03 6 views

Répondre

5

Je suppose que vous voulez dire que vous devez passer la sécurité dans le cadre de l'en-tête SOAP. Voici un exemple de connexion à un service .Net. La même approche devrait s'appliquer w/Java, juste l'url serait différent.

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

Espérons que c'est ce dont vous aviez besoin.

+0

Je vais devoir essayer ça. Merci! – ScArcher2

1

Je n'ai jamais fait ws-sécurité, et ne savent pas si ColdFusion peut consommer ou non, mais pour répondre à votre question secondaire:

Puis-je contourner en écrivant un client Java et en utilisant cela dans coldfusion?

Oui, absolument. ColdFusion peut facilement utiliser des objets et des méthodes Java.

1

Je fais moi-même des recherches sur WS-Secuirty et ColdFusion depuis un certain temps et je peux définitivement dire que l'exemple ci-dessus n'est pas une implémentation de WS-Security. Même si un nom d'utilisateur et un mot de passe sont envoyés dans l'en-tête, ils sont envoyés en clair. Utiliser SSL aidera, mais WS-Security est beaucoup plus de travail que l'application de ce code. ColdFusion nativement ne supporte pas WS-Security, mais il peut facilement utiliser des objets et des méthodes Java. Il y a un paquet d'Apache appelé WSS4J qui fournit des moyens d'implémenter WS-Security en Java. Vous pouvez écrire un wrapper, puis l'utiliser dans ColdFusion. J'ai persoanlly été capable de le faire, cependant, il doit y avoir un petit changement de configuration du côté de ColdFusion avec lequel j'ai quelques problèmes.

Si quelqu'un peut m'aider sur la partie configuration, je l'apprécierais vraiment.

Dmitriy

2

Ceci est probablement plus précis pour produire l'en-tête de savon xml 'simple'. L'exemple ci-dessus manque quelques lignes.

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