2011-10-06 76 views
0

我正在使用Spring MVC的个人网页与本地Tomcat 6服务器。我正在使用默认的Tomcat配置(默认情况下会设置eclipse)。Spring/Tomcat 6会话过期问题

在我的控制器(每个页面使用一个控制器,并创建会话bean以在它们之间传递信息)我有两个方法,一个用于捕获POST,另一个用于捕获GET请求方法。页面逻辑将让用户点击提交按钮,并使用“重定向:abc.htm”返回将它们发送到新页面或返回到GET方法。

我没有明确处理cookies,但确实拥有Session Beans中的所有信息,并且正在使用Spring Security来处理安全/用户管理。

我有一个弹簧安全配置,可以将用户重定向回登录页面,如果他们没有被授权。我也有一个ExceptionHandler捕获HttpSessionRequiredException,虽然这不是我在用户会话过期时触发的(它使用我的Spring Security配置的逻辑)。

当会话过期时(我通过Tomcat管理器执行此操作),用户被重定向回登录页面。他们在尝试做某件事后重定向(点击提交,或重新访问除login.htm以外的任何页面)。

我的问题是,一旦他们回到他们的会话到期的初始页面,如果在到期时他们点击了一个提交按钮,它将他们重定向到最初的页面并处理提交中的POST事件。

例子:

  1. 用户登录,并在主页上
  2. 用户会话过期
  3. 用户的主页上,点击提交按钮
  4. 用户被重定向回login.htm页面
  5. 用户登录并导航回主页面。
  6. 而不是遵循主页面的GET逻辑,它们被视为主页面的POST,我不确定POST变量来自哪里。

有什么方法可以追踪这个错误来自哪里,或者究竟是什么原因造成的?

回答

1

这是由spring-security完成的。在将用户重定向到登录页面之前,Spring Security会将请求细节存储在会话中。成功登录后,它将从会话中检索请求详细信息并重定向到该请求。

您可以设置form-login配置的always-use-default-target属性来覆盖此行为。

+0

完美的工作。非常感谢。在阅读default-target-url的文档后,我可以确切地看到它在哪里说这是导致错误。 – Nicholas