私は組み込みのTomcatサーバーバージョン7を使用しています。セッショントラッキングモードでサーバーをプログラムで構成したいのですが(実際にはjsessionidを取り除く方法クッキーにもURLにも)。 org.apache.catalina.Contextには、web.xml記述子ファイル(このようなファイルは使用できません)のようにこのプロパティを設定するだけの方法はありません。 それを行う最善の方法は何ですか?Tomcatのセッショントラッキングモードをプログラマチックに設定する方法
Iは、上記のコード
Context ctxt = tomcat.addWebapp(.......);
ctxt.getServletContext().setSessionTrackingModes(
my_modes);
を試みたが、この方法は、私はhttps://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/Context.html#addApplicationListener(java.lang.String)を使用しようとしたエラー
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)
で失敗しました。 contextInitialized上のリスナーは、トラッキングモード
servletContextEvent.getServletContext().setSessionTrackingModes(
EnumSet.copyOf(sessionTrackingModes));
を設定する。しかし、最後の方法Context.addApplicationListenerと方法は、リスナーのクラス名をとるので、私はこのリスナーのインスタンスとTomcatを設定する方法がわからないと、空のコンストラクタが存在しない場合があるため、サーバーを実行すると、私のリスナーをインスタンス化に失敗したときに(私のリスナーのコンストラクタは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)
だからあなたはそれを行うには良い方法を提案します
一般的に、リスナーの設定については、https://tomcat.apache.org/tomcat-7.0-doc/config/listeners.htmlを参照してください。私が持っている質問は、なぜあなたは最初にjsessionidを取り除きたいのですか?これは、複数のユーザーによる追跡要求の不可欠な側面であり、コンテナは、適切に機能するためにその情報を必要とします。 – Alan
サーバー側では、HttpSessionではなくカスタムの内部セッションの実装を使用していますので、リクエスト間にこのcutomセッションを識別するために追加した別のクッキーがあります。私はHttpSessionを使用していません – Jugu