【问题标题】:Wicket Session and Jersey REST webserviceWicket Session 和 Jersey REST 网络服务
【发布时间】:2013-04-02 12:35:55
【问题描述】:

目前我正在为 PACS 查看器(医学图像)开发 REST Web 服务。该网络服务需要具有加密/混淆参数,以确保用户无法通过参数模糊获取其他患者的数据。

在 Wicket 面板中即时设置 Session 属性:

wicketSession.setAttribute("study", studyInstanceUID);

我想在 Jersey 网络服务中访问此属性,但会话不包含我的 jersey 网络服务中的任何属性。似乎没有注入或检索它?取而代之的是它创造了一个新的?具有从客户端发送的当前 SessionID 的会话。

我已经为 jersey web 服务创建了一个过滤器和映射器:

<filter-mapping>
    <filter-name>WicketSessionFilter</filter-name>
    <url-pattern>/pacsviewer/*</url-pattern>
</filter-mapping>

但这似乎没有任何区别?我认为我在 web 服务的注入或状态方面做错了什么?

【问题讨论】:

  • 您的过滤器顺序是否正确,即会话过滤器在 Jersey 过滤器之前?我一直在使用过滤器从 Resteasy 访问检票口会话,到目前为止它运行良好。

标签: web-services session jersey wicket


【解决方案1】:

如果您编写自己的过滤器,则可以在底层 HttpSession 中读取与您的 Wicket Session 对应的对象,当您将以下内容放入 web.xml 时,该对象位于“wicket:${filterName}:session”属性下

<filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class>
    <init-param>
        <param-name>filterName</param-name>
        <!-- expose the session of the input example app -->
        <param-value>wicket.Main</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然后,您可以在自己的过滤器中使用以下 Java 代码获取 Wicket Session 对象(例如添加空检查和其他样板代码):

 HttpSession session = httpRequest.getSession(false);
 WebSession wicketSession = session.getAttribute("wicket:wicket.Main:session");
 //do whatever you want with this
 //I think a wicketSession.getAttribute("study")

【讨论】:

    【解决方案2】:

    您的会话对象是否绑定到 HttpSession? Wicket 将尝试延迟实际跟踪会话,直到遇到有状态页面(例如具有 AJAX 功能的页面)。您可以使用以下方式绑定会话:

    getSession().bind();
    

    这将确保 Wicket 的会话被绑定并持久化在容器的 HttpSession 中,并且容器将跟踪该会话。

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 2019-11-30
      • 2017-11-12
      • 2015-01-05
      • 2013-07-16
      • 2014-11-01
      • 2013-11-19
      • 1970-01-01
      • 2015-01-31
      相关资源
      最近更新 更多