升级到jetty 9.4替换HashSessionManager

时间:2017-09-20 21:45:49

标签: jetty jetty-9

升级到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中执行此操作。

2 个答案:

答案 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专家看起来不正确,我很乐意编辑答案,以免误导其他人。