JBoss,GWT app和基于表单的auth超时问题

时间:2014-09-19 08:30:10

标签: gwt jboss session-timeout form-authentication j-security-check

我们的设置是一个部署了GWT应用程序的JBOSS wildfly应用服务器。我们使用基于表单的身份验证,并且为了测试超时,我已将web.xml中的会话超时更改为1分钟。

因此,我登录到应用程序并等待> 1分钟,然后执行我知道将触发RPC调用的操作,该调用将因会话已过期而失败。我们捕获异常并执行页面重新加载以触发登录表单。

如果我在登录表单出现后立即登录(或在1分钟内),我已成功登录到该应用程序。这种模式,只要我在意,我就可以继续。

但是如果我在登录表单出现后等待3-5分钟(在会话超时值之后),则浏览器将重定向到http://ourdomain/myapp/j_security_check(当我查看firefox开发人员/网络时,状态码为200工具)。当我检查HTTP响应时,没有Location属性(通常有)。

谁能告诉我为什么会这样? j_security_check servlet是否有超时,用户需要在显示登录表单后x分钟登录并且是否连接到web.xml中的session-timeout?

1 个答案:

答案 0 :(得分:2)

基于表单的身份验证使用会话并存储最初请求的" URL"在那届会议上。登录时,会从会话中读取URL并将其用作重定向的目标。所以如果你等了太长时间"在显示登录表单以使会话超时后,您刚刚丢失了该数据,并且服务器不知道将您重定向到哪里。

无论如何,这是如何在Servlets规范中定义基于表单的身份验证的缺陷(我从未想过它,所以感谢提出问题;-)),即使不使用相同的配置会话(规范并没有强制要求使用会话,尽管大多数 - 如果不是所有容器只使用会话),规范说(强调我的):

  

与安全约束关联的登录表单将发送到客户端和   触发身份验证的URL路径和HTTP协议方法由存储   容器。
  [...]
  如果身份验证成功,则使用存储将客户端重定向到资源   网址路径   [...]
  如果由于HTTP请求而调用基于表单的登录,则为原始请求   参数必须由容器保留,以便在成功时使用   身份验证,它将调用重定向到请求的资源。

(注意:容器可能会在没有过期的情况下将信息存储在cookie中,然后这仍然可以工作,同时仍然遵循规范;容器开发人员在这么多年之后是不是太懒了?或者他们只是认为它不值得修理?)