Ich verwende einen eingebetteten Tomcat-Server Version 7. Ich möchte den Server mit dem Session-Tracking-Modus konfigurieren (in der Tat suche ich einen Weg, um jsessionid dh weder zu beseitigen in den Cookies noch in der URL). Aber es gibt keine Methode in org.apache.catalina.Context, um diese Eigenschaft einfach wie in einer web.xml-Deskriptordatei zu konfigurieren (ich kann solche Datei nicht verwenden). Also, was ist der beste Weg, es zu tun?Wie konfiguriere ich programmatisch die Session-Tracking-Modi für Tomcat
habe ich versucht, den obigen Code
Context ctxt = tomcat.addWebapp(.......);
ctxt.getServletContext().setSessionTrackingModes(
my_modes);
Aber diese Methode mit dem Fehler fehlgeschlagen
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)
Ich versuchte https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/Context.html#addApplicationListener(java.lang.String) zu verwenden. Der Hörer auf contextInitialized stellen Sie den Tracking-Modus
servletContextEvent.getServletContext().setSessionTrackingModes(
EnumSet.copyOf(sessionTrackingModes));
Aber ich weiß nicht, wie Kater mit einer Instanz dieses Zuhörer zu konfigurieren, da mit der letzten Methode Context.addApplicationListener das Verfahren den Klassenname des Hörers nimmt und wenn der Server läuft nicht meine Zuhörer instanziiert, weil das Fehlen eines leeren Konstruktor (meine Zuhörer Konstruktor die Liste der sessionTrackingMode nimmt .. kann nicht konfigurierbar sein)
[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)
So schlagen Sie einen besseren Weg, es zu tun
Im Allgemeinen finden Sie unter https://tomcat.apache.org/tomcat-7.0-doc/config/listeners.html zum Einrichten von Listenern. Die Frage, die ich habe, ist warum möchten Sie Jsessionid in erster Linie loswerden? Es ist ein wesentlicher Aspekt beim Verfolgen von Anfragen, die von mehreren Benutzern durchgeführt wurden, und der Container benötigt diese Informationen, um ordnungsgemäß zu funktionieren. – Alan
Weil ich auf der Serverseite eine benutzerdefinierte interne Sitzungsimplementierung verwende, keine HttpSession, und es gibt noch weitere Cookies, die ich hinzugefügt habe, um diese Cutom-Sitzung zwischen Anfragen zu identifizieren. Ich benutze nicht HttpSession – Jugu