J'ai besoin d'accéder au responsable du servlet (ou du filtre) dans Tomcat pour charger la session personnalisée par identifiant de session personnalisé. P>
Répondre à votre prochaine question: Pourquoi en ai-je besoin? Il y a un ancien bogue en Flash qui lui permet d'envoyer des cookies d'IE et non du navigateur actuel. Donc, si je suis à FF et que j'essaie de télécharger le fichier avec Swfupload, je me retrouve avec la mauvaise session et une erreur. P>
Je souhaite ajouter le paramètre magique à la poste qui devrait remplacer l'ID de session par défaut (incorrect), puis chargez la session personnalisée au lieu d'un chargé par Tomcat. Je ne peux pas utiliser la réécriture d'URL car les cookies sont résolus en premier et lorsque Flash envoie un mauvais cookie de IE, Tomcat n'essaie pas de charger la session de l'adresse URL-réécrit. P>
J'apprécierais tout autre indice comment accéder au responsable du contexte ou une solution du problème initial. p>
Merci d'avance, Juriy P>
4 Réponses :
Il doit être accessible via la mise en oeuvre de (Je n'ai pas pu trouver si le responsable est exposé dans JNDI, mais vous pouvez aussi regarder ici) P> servleContext code>. Obtenez les sources de Tomcat pour vérifier cela ou utiliser la réflexion pour obtenir tous les domaines du contexte. Vous devrez peut-être utiliser beaucoup de réflexion pour vous rendre au responsable. P>
pour tomcat:
par opposition à manager code> à partir de
httpsession code>:
private Manager getManager(ServletContext servletContext) { try { ApplicationContextFacade applicationContextFacade = (ApplicationContextFacade) servletContext; Field applicationContextFacadeField = ApplicationContextFacade.class.getDeclaredField("context"); applicationContextFacadeField.setAccessible(true); ApplicationContext appContext = (ApplicationContext) applicationContextFacadeField.get(applicationContextFacade); Field applicationContextField = ApplicationContext.class.getDeclaredField("context"); applicationContextField.setAccessible(true); StandardContext stdContext = (StandardContext) applicationContextField.get(appContext); return stdContext.getManager(); } catch (Exception e) { //skip this as we can also use Manager as null for metrics //"Unable to get Catalina Manager. Cause: {}", e.getMessage() , e; } return null; }
Veuillez ajouter quelques explications à votre réponse, de sorte que d'autres puissent en apprendre