为了拥有自定义会话存储,我实现了自定义 sessionManager(通过扩展NoSqlSessionManager
)和 sessionIdManager。我的代码(连同它需要的 jars)进入${jetty.home}/lib/ext
(版本 8.1.4 BTW)。我包含了另一个具有start.ini
以下内容的配置文件:
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Set name="sessionIdManager">
<New id="customIdMgr" class="com.me.customSessionIdManager">
<Arg>...</Arg>
</New>
</Set>
</Configure>
码头启动并且 sessionIdManager 似乎正在工作。至少scavenge()
方法被调用。到现在为止还挺好。下一步是将我的自定义 sessionManager 与WebAppContext
我选择的相关联。我在覆盖模板 ( overlay.xml
) 中使用以下内容进行了操作:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Get name="server">
<Get id="customIdMgr" name="sessionIdManager"/>
</Get>
<Set name="sessionHandler">
<New class="org.eclipse.jetty.server.session.SessionHandler">
<Arg>
<New class="com.me.customSessionManager">
<Set name="sessionIdManager"><Ref id="customIdMgr"/></Set>
</New>
</Arg>
</New>
</Set>
</Configure>
但是,当启动 Jetty 时,我得到了这个:
WARN:oejx.XmlConfiguration:Config error at <Get id="customIdMgr" name="sessionIdManager"/> java.lang.NullPointerException
...这意味着在处理覆盖时,在主码头配置中注册的对象现在消失了。
知道我在这里做错了什么吗?