2

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

在 Wicket 面板中,我正在设置 Session 属性:

wicketSession.setAttribute("study", studyInstanceUID);

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

我为球衣网络服务创建了一个过滤器和映射器:

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

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

4

2 回答 2

3

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

<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")
于 2013-04-02T15:17:02.790 回答
0

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

getSession().bind();

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

于 2013-04-02T18:27:58.467 回答