J'utilise un serveur Tomcat intégré version 7. Je veux configurer par programme le serveur avec le mode de suivi de session (en fait, je cherche un moyen de se débarrasser de jsessionid ie ni dans les cookies ni dans l'url). Mais il n'y a pas de méthode dans org.apache.catalina.Context pour configurer simplement cette propriété comme dans un fichier descripteur web.xml (je ne peux pas utiliser un tel fichier). Alors, quelle est la meilleure façon de le faire?Comment configurer par programmation les modes de suivi de session pour Tomcat
J'ai essayé le code ci-dessus
Context ctxt = tomcat.addWebapp(.......);
ctxt.getServletContext().setSessionTrackingModes(
my_modes);
Mais cette méthode a échoué avec l'erreur
java.lang.IllegalStateException: The session tracking modes for context/cannot be set whilst the context is running
at org.apache.catalina.core.ApplicationContext.setSessionTrackingModes(ApplicationContext.java:1235)
at org.apache.catalina.core.ApplicationContextFacade.setSessionTrackingModes(ApplicationContextFacade.java:611)
J'ai essayé d'utiliser https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/Context.html#addApplicationListener(java.lang.String). L'auditeur sur contextInitialized définir le mode de suivi
servletContextEvent.getServletContext().setSessionTrackingModes(
EnumSet.copyOf(sessionTrackingModes));
Mais je ne sais pas comment configurer tomcat avec une instance de cet écouteur parce qu'avec la dernière méthode Context.addApplicationListener la méthode prend le nom de classe de l'auditeur et lors de l'exécution du serveur ne parvient pas à instancier mon auditeur parce que l'absence d'un constructeur vide (mon constructeur auditeur prend la liste des sessionTrackingMode .. ne peut pas être configurable)
[read-1] ERROR Aug 18 19:10:03 - Error configuring application listener of class xx.xx.xx.SessionTrackingListener
java.lang.InstantiationException: xx.xx.xx.SessionTrackingListener
at java.lang.Class.newInstance(Class.java:427)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:125)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4715)
..............
Caused by: java.lang.NoSuchMethodException: xx.xx.xx.xx.SessionTrackingListener.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
Alors proposez-vous une meilleure façon de le faire
En général, consultez https://tomcat.apache.org/tomcat-7.0-doc/config/listeners.html pour configurer les écouteurs. La question que j'ai est pourquoi voudriez-vous vous débarrasser de jsessionid en premier lieu? C'est un aspect intégral des demandes de suivi faites par plusieurs utilisateurs et le conteneur a besoin de cette information pour fonctionner correctement. – Alan
Parce que dans le côté serveur, j'utilise une implémentation de session interne personnalisée, pas une session HttpSession et il y a un autre cookie que j'ai ajouté pour identifier cette session entre les requêtes. Je n'utilise pas HttpSession – Jugu