【问题标题】:struts2 creating session objects, why and when?struts2 创建会话对象,为什么以及何时?
【发布时间】:2012-10-26 13:45:50
【问题描述】:

我只想在用户在我的 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 应用程序中创建会话?

-纳伦德拉

【问题讨论】:

  • 请重新表述struts2创建会话对象的问题,为什么以及何时。
  • 应用服务器负责创建和管理会话而不是 struts 2。尝试禁用此功能是没有意义的,请参阅 Davids 的回答。

标签: java jsp struts2 apache-cayenne xwork


【解决方案1】:

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

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

【讨论】:

  • 我已经在我的 jsp 页面中使用以下指令来防止创建会话。 .
  • @Narendra 说真的,没有理由去麻烦。您为什么要关心是否有未使用的会话?
【解决方案2】:

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

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

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

【讨论】:

  • 感谢您的详细解答。
猜你喜欢
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 2011-05-07
  • 2012-04-30
  • 2012-06-01
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多