struts2创建会话对象,为什么以及何时?

时间:2012-11-06 15:10:42

标签: java jsp struts2 apache-cayenne xwork

我想仅在用户在我的Web应用程序中成功通过身份验证时创建会话。但由于某种原因struts2创建会话对象,即使我们只是访问登录页面。

我仔细阅读了struts2的一些文档,发现使用struts.custom.i18n.resources可能会创建会话。所以我从struts.xml文件中删除了它。但即使在我的Web应用程序中创建了会话。

对此有任何帮助/想法,我们非常感激。

更新问题

我的web.xml中有以下几行来处理Cayenne数据上下文。

<filter>
    <filter-name>CayenneFilter</filter-name>
    <filter-class>org.apache.cayenne.conf.WebApplicationContextFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CayenneFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

这会导致我的网络应用程序中创建会话吗?

-Narendra

2 个答案:

答案 0 :(得分:4)

JSP页面会自动创建会话,除非您明确包含一条告诉他们不要的指令。

IMO试图阻止会话创建是浪费时间。相反,在有效登录时将放入会话中,并在注销时使会话无效。其他任何事都太过分了。

答案 1 :(得分:1)

以下是Cayenne观点的答案。默认情况下,WebApplicationContextFilter为过滤器匹配的每个请求延迟创建一个会话绑定的ObjectContext。这当然会创建一个HttpSession。

因此,一种解决方案是将过滤器映射从“/ *”减少到对应于经过身份验证的页面的更具体的URL。然后不会为匿名用户调用Cayenne过滤器。

如果无法做到这一点,请创建自己的WebApplicationContextFilter版本(在所有WebApplicationContextFilter只是一个关于如何在应用程序中引导Cayenne的示例之后,请检查其来源,并为自己创建类似的东西)。您自己的过滤器可以实现一些逻辑,跳过匿名的ObjectContext(和会话)创建。