Comment puis-je utiliser un service Web protégé par l'authentification de base HTTP en utilisant le cadre CXF?

StackOverflow https://stackoverflow.com/questions/705728

  •  22-08-2019
  •  | 
  •  

Question

J'ai essayé de le faire fonctionner en utilisant le CXF Guide de l'utilisateur, mais j'ai eu pas de chance.

Je suis en train d'appeler le service Web en utilisant le code java.

Était-ce utile?

La solution

Ceci est couvert par la spécification JAX-WS. Fondamentalement, définissez le nom d'utilisateur / mot de passe en tant que propriétés sur le contexte de la demande:

((BindingProvider)proxy).getRequestContext().put(
    BindingProvider.USERNAME_PROPERTY, "joe");
((BindingProvider)proxy).getRequestContext().put(
    BindingProvider.PASSWORD_PROPERTY, "pswd");

Le temps d'exécution les met dans l'en-tête HTTP.

Autres conseils

Vous pouvez fournir votre propre Authenticator. De cette façon, il ne fonctionnera que si le WSDL lui-même est protégé par une authentification HTTP de base.

@WebServiceRef(wsdlLocation = "https://laka/sito?wsdl")
static XxxService service;

public static void main(String[] args) {

    Authenticator.setDefault(new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("user", "password".toCharArray());
        }
    });

    service = new XxxService();
    Xxx port = service.getXxxPort();

    // invoke webservice and print response
    XxxResponse resp = port.foo();
    System.out.println(resp.toString());

}

Il y a une bien meilleure:

lors de la génération Java à partir WSDL, ajouter l'option "-exsh true":

wsdl2java -exsh vrai -p edu.sharif.ce http://wsdl.ir/WebServices /WebService.asmx?WSDL

et ajouter UserCredential lorsque vous utilisez:

UserCredentials user = new UserCredentials();
user.setUserid("user");
user.setPassword("pass");

ResearchWebService_Service service = new ResearchWebService_Service();
ResearchWebService port = service.getResearchWebService();
port.addNewProject(newProject, user);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top