簡體   English   中英

如何以編程方式配置Tomcat的會話跟蹤模式

[英]How to configure programatically the session tracking modes for Tomcat

我正在使用嵌入式tomcat服務器版本7.我想以編程方式使用會話跟蹤模式配置服務器(實際上我搜索了一種方法來擺脫jsessionid,即既不在cookie中也不在URL中)。 但是在org.apache.catalina.Context中沒有一個方法可以像在web.xml描述符文件中那樣簡單地配置這個屬性(我不能使用這樣的文件)。 那么最好的方法是什么?

我嘗試了上面的代碼

Context ctxt = tomcat.addWebapp(.......);
ctxt.getServletContext().setSessionTrackingModes(
        my_modes);

但是這種方法因錯誤而失敗

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)

我嘗試使用https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/Context.html#addApplicationListener(java.lang.String) contextInitialized上的監聽器設置跟蹤模式

servletContextEvent.getServletContext().setSessionTrackingModes(
        EnumSet.copyOf(sessionTrackingModes));

但我不知道如何使用此偵聽器的實例配置tomcat,因為使用上一個方法Context.addApplicationListener,該方法采用偵聽器的className,並且在運行服務器時無法實例化我的偵聽器,因為缺少空構造函數(我的監聽器構造函數獲取sessionTrackingMode列表..無法配置)

[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)

所以你建議一個更好的方法來做到這一點

使用SessionTrackingListener。 您正在使用的問題是它沒有默認構造函數。 如果您向其添加默認構造函數,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM