升级到 jetty 9.4 替换 HashSessionManager
Upgrading to jetty 9.4 replacing the HashSessionManager
升级到 jetty 9.4 后,我注意到 org.eclipse.jetty.server.session.HashSessionManager
的 ClassNotFoundException。
我想我需要使用 FileSessionDataStore
但我不明白应该如何在 SessionHandler
上设置。
我目前的配置是:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
...
<Set name="sessionHandler">
<New class="org.eclipse.jetty.server.session.SessionHandler">
<Arg>
<New class="org.eclipse.jetty.server.session.HashSessionManager">
<Set name="storeDirectory">my/store/path</Set>
</New>
</Arg>
</New>
</Set>
</Configure>
我不明白我需要做什么,SessionHandler
不带 SessionDataStore
,但可以在其上设置 SessionCache
但它看起来像实现SessionCache
的人想要在构造函数中使用 SessionHandler
,我在 XML 中看不到如何做到这一点。
啊,我想我已经解决了,结果不太好:
<Set name="sessionHandler">
<New class="org.eclipse.jetty.server.session.SessionHandler">
</New>
</Set>
<Call name="getSessionHandler" id="sessionHandler" />
<Ref refid="sessionHandler">
<Set name="SessionCache">
<New class="org.eclipse.jetty.server.session.DefaultSessionCache">
<Arg>
<Ref refid="sessionHandler"/>
</Arg>
<Set name="SessionDataStore">
<New class="org.eclipse.jetty.server.session.FileSessionDataStore">
<Set name="StoreDir">my/store/path</Set>
</New>
</Set>
</New>
</Set>
</Ref>
我遵循了在 http://useof.org/java-open-source/org.eclipse.jetty.server.session.FileSessionDataStore
中找到的更易于阅读的纯 java 示例
如果 Jetty 专家认为这不正确,我很乐意编辑答案以免误导他人。
在 jetty-9.4 会话架构中,您有 SessionHandler
需要一个 SessionCache
,它可以选择需要一个 SessionDataStore
。
有关编程示例,请参阅 OneServletContextWithSession
。
该示例使用了 NullSessionDataStore
,但原理与 FileSessionDataStore
相同,后者替代了旧的 HashSessionManager
将会话存储到磁盘的能力。
Jetty 文档包含信息 on changes from previous versions of Jetty session management to the 9.4 style。
如果您点击文档中的链接,您还将找到有关新会话架构的详细信息。
正如文档所解释的那样,在发行版中 运行 时,在 jetty-9.4 中配置会话的最简单方法是启用适当的模块。但是,如果您是 运行 嵌入式,或者您只想为 xml 中的特定 Web 应用程序设置会话管理,这里有一些设置 FileSessionDataStore
的示例代码:
<Get id="sh" name="sessionHandler">
<Set name="sessionCache">
<New class="org.eclipse.jetty.server.session.DefaultSessionCache">
<Arg><Ref id="sh"/></Arg>
<Set name="sessionDataStore">
<New class="org.eclipse.jetty.server.session.FileSessionDataStore">
<Set name="storeDir">/tmp/sessions</Set>
</New>
</Set>
</New>
</Set>
</Get>
升级到 jetty 9.4 后,我注意到 org.eclipse.jetty.server.session.HashSessionManager
的 ClassNotFoundException。
我想我需要使用 FileSessionDataStore
但我不明白应该如何在 SessionHandler
上设置。
我目前的配置是:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
...
<Set name="sessionHandler">
<New class="org.eclipse.jetty.server.session.SessionHandler">
<Arg>
<New class="org.eclipse.jetty.server.session.HashSessionManager">
<Set name="storeDirectory">my/store/path</Set>
</New>
</Arg>
</New>
</Set>
</Configure>
我不明白我需要做什么,SessionHandler
不带 SessionDataStore
,但可以在其上设置 SessionCache
但它看起来像实现SessionCache
的人想要在构造函数中使用 SessionHandler
,我在 XML 中看不到如何做到这一点。
啊,我想我已经解决了,结果不太好:
<Set name="sessionHandler">
<New class="org.eclipse.jetty.server.session.SessionHandler">
</New>
</Set>
<Call name="getSessionHandler" id="sessionHandler" />
<Ref refid="sessionHandler">
<Set name="SessionCache">
<New class="org.eclipse.jetty.server.session.DefaultSessionCache">
<Arg>
<Ref refid="sessionHandler"/>
</Arg>
<Set name="SessionDataStore">
<New class="org.eclipse.jetty.server.session.FileSessionDataStore">
<Set name="StoreDir">my/store/path</Set>
</New>
</Set>
</New>
</Set>
</Ref>
我遵循了在 http://useof.org/java-open-source/org.eclipse.jetty.server.session.FileSessionDataStore
中找到的更易于阅读的纯 java 示例如果 Jetty 专家认为这不正确,我很乐意编辑答案以免误导他人。
在 jetty-9.4 会话架构中,您有 SessionHandler
需要一个 SessionCache
,它可以选择需要一个 SessionDataStore
。
有关编程示例,请参阅 OneServletContextWithSession
。
该示例使用了 NullSessionDataStore
,但原理与 FileSessionDataStore
相同,后者替代了旧的 HashSessionManager
将会话存储到磁盘的能力。
Jetty 文档包含信息 on changes from previous versions of Jetty session management to the 9.4 style。
如果您点击文档中的链接,您还将找到有关新会话架构的详细信息。
正如文档所解释的那样,在发行版中 运行 时,在 jetty-9.4 中配置会话的最简单方法是启用适当的模块。但是,如果您是 运行 嵌入式,或者您只想为 xml 中的特定 Web 应用程序设置会话管理,这里有一些设置 FileSessionDataStore
的示例代码:
<Get id="sh" name="sessionHandler">
<Set name="sessionCache">
<New class="org.eclipse.jetty.server.session.DefaultSessionCache">
<Arg><Ref id="sh"/></Arg>
<Set name="sessionDataStore">
<New class="org.eclipse.jetty.server.session.FileSessionDataStore">
<Set name="storeDir">/tmp/sessions</Set>
</New>
</Set>
</New>
</Set>
</Get>