2010-09-09 5 views
0

J'essaie d'exécuter une implémentation OAuth sur une servlet pour Twitter. J'ai des problèmes pour rediriger l'utilisateur vers la page d'authentification Twitter. Lorsque je reçois le rappel, il est renvoyé à une servlet mais la session est différente car la requête provient de Twitter et non de ma webapp.Servlets encodeRedirectURL

J'ai essayé d'utiliser encodeRedirectURL pour que la session persiste sur le site extérieur mais cela ne fonctionne pas. Besoin d'aide pour!

Répondre

3

Vous devez ajouter l'ID de session au format jsessionid fragment de l'URL de rappel. Twitter doit rappeler à http://example.com/callbackservlet;jsessionid=1E6FEC0D14D044541DD84D2D013D29ED (note: la valeur jsessionid est ici juste un exemple).

Les codes HttpServletResponse#encodeRedirectURL() (et encodeURL()) n'encodent pas l'URL lorsque le client prend déjà en charge les cookies. Vous devez l'encoder vous-même.

String url = "http://example.com/callbackservlet"; 
String encodedURL = url + ";jsessionid=" + request.getSession().getId(); 
+0

Bonne réponse! Mais j'ai rencontré un autre problème avec ça. Le rappel revient à la demande de paramètres, mais Tomcat supprime tout de jsessionid à la fin de l'URL, donc je perds ces paramètres. – Kirn

+0

Etes-vous sûr que c'est Tomcat qui fait ça? N'y a-t-il pas de 'Filter' dans votre webapp qui fait comme' response.sendRedirect (request.getRequestURI()) 'basé sur une condition? – BalusC