0

只有当用户在我的 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>

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

-纳伦德拉

4

2 回答 2

4

JSP 页面会自动创建会话,除非您特别包含一个指示它们不要这样做的指令。

IMO 试图阻止会话创建是浪费时间。相反,在有效登录时将某些内容放入会话中,并在注销时使会话无效。其他任何事情都是太多的工作。

于 2012-11-06T16:59:59.840 回答
2

这是从 Cayenne 角度来看的答案。默认情况下,WebApplicationContextFilter 会为过滤器匹配的每个请求懒惰地创建一个会话绑定的 ObjectContext。这当然会创建一个 HttpSession。

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

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

于 2012-11-07T15:02:20.047 回答