2011-07-13 1 views
1

Je dois faire une requête POSTComment autoriser l'utilisation d'Apache Camel?

curl -X POST --data-binary @auth.json http://somehost.com/auth 
{ 
    "response": { 
     "status": "OK", 
     "token": "622cee5f8c99c81e87614e9efc63eddb" 
    } 
} 

, et cela renvoie une réponse JSON avec le jeton. auth.json est un fichier JSON avec login et mot de passe. J'ai alors deux options: mettre le jeton dans l'en-tête dans les prochaines requêtes comme "Authorization: TOKEN", ou le mettre dans un cookie et faire d'autres requêtes. Comment puis-je le faire avec Apache Camel? Comment puis-je recevoir une réponse HTTP? Où dois-je mettre le jeton? Maintenant, j'ai:

public static void main(String args[]) throws Exception { 
    CamelContext context = new DefaultCamelContext(); 
    context.addRoutes(new RouteBuilder() { 
     public void configure() { 
      from("file:data/inbox?noop=true") 
      .to("http://somehost.com/auth"); 
     } 
    }); 
    context.start(); 
    Thread.sleep(10000); 
    context.stop(); 

} et je le fichier auth.json dans ./data/inbox

Répondre

2

Depuis que vous avez posté la même question sur la liste de diffusion Camel Apache J'ai fourni là-bas an answer .

Pour récapituler: Appelez simplement setHeader("Authorization", constant("622cee5f8c99c81e87614e9efc63eddb")) dans votre itinéraire avant d'envoyer la demande http. Camel traduira automatiquement cet en-tête dans un en-tête spécifique au transport (dans ce cas, HTTP). Bien sûr, vous n'avez pas besoin de fournir un jeton constant sur votre route, vous pouvez calculer ou rechercher dynamiquement le jeton en utilisant un processeur Camel expression.

Votre itinéraire complet ressemblera à quelque chose comme:

context.addRoutes(new RouteBuilder() { 
    public void configure() { 
      from("file:data/out?fileName=filename.json&noop=true") 
      .setHeader("Authorization", constant("mytoken")) 
      .to("http://somehost.com/auth"); 
} 
+2

J'ai essayé la mise en place des en-têtes comme mentionné par vous. Mais j'étais incapable de passer les en-têtes. J'ai essayé d'utiliser exchange.getOut.setHeaders (en-têtes), mais seul content-type est passé, pas l'en-tête d'autorisation. Aucune suggestion?? – Vikash