升级到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
,但它看起来像{的实现{1}}在构造函数中需要SessionCache
,我不知道如何在XML中执行此操作。
答案 0 :(得分:5)
在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中为特定的网络应用程序设置会话管理,请参阅以下设置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>
答案 1 :(得分:1)
啊我认为我已经解决了,它并不漂亮它最终成为:
<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专家看起来不正确,我很乐意编辑答案,以免误导其他人。