升级到jetty 9.4之后,我注意到了一个ClassNotFoundException org.eclipse.jetty.server.session.HashSessionManager.我想我需要使用一个,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>
Run Code Online (Sandbox Code Playgroud)
我没有看到我需要做什么,SessionHandler没有拿a SessionDataStore,但是SessionCache可以设置它,但它看起来像是在构造函数中SessionCache想要的实现SessionHandler,我不知道如何在XML中这样做.
在jetty-9.4会话架构中,你SessionHandler需要一个SessionCache,可选择一个SessionDataStore.
有关OneServletContextWithSession编程示例,请参阅.
该示例使用了NullSessionDataStore,但原理与之相同FileSessionDataStore,这是HashSessionManager将会话存储到磁盘的旧功能的替代.
Jetty文档包含有关从以前版本的Jetty会话管理到9.4样式的更改的信息.
如果您按照文档中的链接进行操作,您还可以找到有关新会话体系结构的详细信息.
正如文档所解释的那样,在分发中运行时在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>
Run Code Online (Sandbox Code Playgroud)