java - Jetty 和自定义 sessionIdManager

标签 java jetty session-management

为了拥有自定义 session 存储,我实现了自定义 sessionManager(通过扩展 NoSqlSessionManager)和 sessionIdManager。我的代码(以及它所需的 jar)进入了 ${jetty.home}/lib/ext (顺便说一句,版本 8.1.4)。在 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>

Jetty 启动并且 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

...这意味着在处理覆盖层时,在主 jetty 配置中注册的对象现在消失了。

知道我在这里做错了什么吗?

最佳答案

经过大量调试后发现,问题的根源是 <Get name="server">返回空值。最有可能的是,对 Server 类的引用会在部署过程的后期注入(inject)到 WebAppContext 中。因此,我没有使用 Server 来引用它 <Ref id="Server">这样就成功了。

关于java - Jetty 和自定义 sessionIdManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088146/

相关文章:

java - Apache Pig UDF 和 outputSchema 定制

java - 改造 2 @path 与 @query

ssl - Jetty 教程中的 SSL 密码

nhibernate - 如何使用 LifestyleScoped 实现 CaSTLe Windsor IScopeAccessor 以提供每个 ViewModel 的 NHibernate session

c# - 当 session 过期时, session 管理器不会将我注销,HTTPContext.Current 为 Null

java - 如何将一个文本拆分为多个文本文件

java - Jetty:Servlet 无法转发到 JSP

java - 在嵌入式 Jetty Web 容器中运行 OSGi 容器。可能的?

java - ThreadLocal 用于管理 session 数据

java - 如何使用 Java/JNA 在 Vista+ 上以提升的权限启动应用程序以触发 UAC