IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

[CXF & Proxy] authentification au proxy en mode Basic


Sujet :

Services Web Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut [CXF & Proxy] authentification au proxy en mode Basic
    Bonjour,

    préambule : j'utilise cxf 2.1.4, Jboss 4.0.5 avec une jdk 1.6.

    Je dois me connecter à un WebService via HTTPS, ce que j'arrive à faire correctement.
    Cependant, le réseau peut parfois être muni d'un proxy et il faut donc que je donne la possibilité de passer à travers ce proxy. pour celà, j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    BindingProvider provider = (BindingProvider) port;
    provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     
    Client client = ClientProxy.getClient(provider);
     
    HTTPConduit conduit = (HTTPConduit) client.getConduit();
     
    HTTPClientPolicy policy =  new HTTPClientPolicy();
    policy.setConnectionTimeout(TIME_OUT);
    policy.setReceiveTimeout(TIME_OUT);
     
    // Affectation du serveur proxy
    if (!StringTools.isNullOrEmpty(proxyHost)) {
    	policy.setProxyServerType(ProxyServerType.HTTP);
    	policy.setProxyServer(proxyHost);
    	policy.setProxyServerPort(proxyPort);
    }
     
    conduit.setClient(policy);
     
    // Définition du compte d'authentification au proxy
    if (!StringTools.isNullOrEmpty(proxyUser)) {
    	ProxyAuthorizationPolicy proxyAuthorizationPolicy = new ProxyAuthorizationPolicy();
            proxyAuthorizationPolicy.setUserName(proxyUser);
            proxyAuthorizationPolicy.setPassword(proxyPwd);
     
            conduit.setProxyAuthorization(proxyAuthorizationPolicy);
    }
    Mon problème est le suivant :
    l'adresse du proxy et le port pour s'y connecter (l'HttpClientPolicy, quoi) sont bien pris en compte. Cependant, si je suis sur un proxy qui prend en compte une authentification "BASIC", l'user et le pwd (donc le ProxyAuthorizationPolicy) ne sont pas pris en compte et la connexion m'est refusée avec une belle erreur 407 Proxy Authentication Required.

    Après avoir un peu fouillé, j'ai trouvé cette issue : https://issues.apache.org/jira/browse/CXF-2223 qui a l'air de correspondre à mon problème.
    J'ai donc pris la version 2.1.9 de cxf qui doit normalement résoudre ce soucis.

    Cependant, avec cette nouvelle revision et le même code que ci-dessus, une exception est remontée sur l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTTPConduit conduit = (HTTPConduit) client.getConduit();
    Voici le Stack :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name '*.http-conduit': Cannot create inner bean '(inner bean)' of type [org.apache.cxf.configuration.spring.JAXBBeanFactory] while setting bean property 'client'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public static java.lang.Object org.apache.cxf.configuration.spring.JAXBBeanFactory.createJAXBBean(javax.xml.bind.JAXBContext,java.lang.String,java.lang.Class)] threw exception; nested exception is java.lang.RuntimeException: javax.xml.bind.UnmarshalException
     - with linked exception:
    [javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,219]
    Message: <a href="http://www.w3.org/TR/1999/REC-xml-names-19990114#ElementPrefixUnbound?http&http:client]" target="_blank">http://www.w3.org/TR/1999/REC-xml-na...p&http:client]</a>
    J'avoue que j'ai un peu cherché mais là je sèche un peu... Quelqu'un aurait-il une idée ?

    Merci d'avance

  2. #2
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Bonjour,

    J'ai déjà été confronter au problème de l'authentification à un proxy. Pour le résoudre, j'avais une approche différente de la tienne (gestion dans le code).

    L'approche que j'ai utilisé consistait à paramétrer cela directement au niveau de la jvm. Tu trouveras pas mal d'info, à commencer par la FAQ qui explique les deux approches.

    Une recherche rapide sur google te donnera ce type de page, qui montre également comment s'authentifier auprès du proxy.

    En esperant que cela puisse t'aider.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Bonjour, tout d'abord, merci de ta réponse rapide.
    Citation Envoyé par benratti Voir le message
    L'approche que j'ai utilisé consistait à paramétrer cela directement au niveau de la jvm.
    En effet, dans mon post, je ne l'ai pas précisé, mais j'ai essayé (avec succès) le passage des paramètres à la JVM.
    En utilisant ce passage de paramètre et un Authenticator (j'avais notamment trouvé ce billet intéressant http://blog.on-x.com/2010/08/authent...nt-jax-ws-cxf/) pour passer l'user et le mot de passe du proxy, cela fonctionne correctement.

    De plus, en faisant un mix :
    • configuration de l'hôte/port au niveau de l'HTTPClientPolicy
    • configuration de l'user/pwd au niveau de l'Authenticator

    ça fonctionne également.

    Cependant, je ne souhaite pas passer par le paramétrage jvm, ni par un authentificator et ce pour différentes raisons :
    • Il pourrait y avoir, dans l'application, plusieurs proxy à attaquer (même si c'est tordu, on est d'accord)
    • Le paramétrage est offert dans l'application pour pouvoir changer à chaud le proxy et ne pas avoir à redéployer l'application
    • CXF est censé gérer l'authentification à un proxy par le biais d'un ProxyAuthorizationPolicy, c'est la solution la plus propre, je trouve, et je souhaite donc l'utiliser


    Cordialement

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Bon ben finalement, il semble que ce soit un problème de (non)prise en compte des namespaces de mon fichier de configuration cxf.xml qui est celui-ci (en résumé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:sec="http://cxf.apache.org/configuration/security"
      xmlns:http="http://cxf.apache.org/transports/http/configuration"
      xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
      xmlns:wsa="http://cxf.apache.org/ws/addressing"
      xmlns:cxf="http://cxf.apache.org/core"
     
       xsi:schemaLocation="http://cxf.apache.org/core
        				   http://cxf.apache.org/schemas/core.xsd  
    					   http://cxf.apache.org/configuration/security
    					   http://cxf.apache.org/schemas/configuration/security.xsd
    					   http://cxf.apache.org/transports/http/configuration
    					   http://cxf.apache.org/schemas/configuration/http-conf.xsd
    					   http://www.springframework.org/schema/beans
    					   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
     
        <http:conduit name="*.http-conduit"> 
            <http:client AutoRedirect="true" Connection="close" ConnectionTimeout="6000" ReceiveTimeout="6000" CacheControl="no-cache" AllowChunking="false" /> 
        </http:conduit> 
    </beans>
    En modifiant le conduit et le client en rajoutant les namespaces comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <http:conduit xmlns:http="http://cxf.apache.org/transports/http/configuration" name="*.http-conduit"> 
        <http:client xmlns:http="http://cxf.apache.org/transports/http/configuration" 
        		AutoRedirect="true" Connection="close" ConnectionTimeout="6000" ReceiveTimeout="6000" CacheControl="no-cache" AllowChunking="false" /> 
    </http:conduit>
    Ca fonctionne.
    Va comprendre...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mod Proxy + Authentification Windows
    Par Sopalinou dans le forum Apache
    Réponses: 2
    Dernier message: 20/06/2011, 11h08
  2. [XL-2002] Authentification par Proxy
    Par mbasroger dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/05/2009, 17h27
  3. [WAS 4.0.5] Configuration proxy authentification
    Par Max dans le forum Websphere
    Réponses: 0
    Dernier message: 11/12/2007, 15h59
  4. [Tomcat] Problème d'authentification au Proxy
    Par Tangi29 dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 12/06/2006, 10h39
  5. [Tomcat] Problème d'authentification au Proxy
    Par Tangi29 dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 24/05/2006, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo