如何在会话超时后处理基于表单的身份验证登录(j_security_check)

时间:2016-01-05 12:01:19

标签: session-timeout j-security-check

有关在会话超时后处理登录到Web /应用程序服务器(WildFly 9.0.2)的问题。

情景:

我有一个简单的Web应用程序,其中包含使用基于表单的身份验证(操作:j_security_check)和容器管理登录的登录页面。

这可以按预期工作:

  1. 登录的工作原理如下:
  2. 在浏览器中调用URL localhost:8080 / SecurityWeb /
  3. 然后登录页面显示在浏览器中。
  4. 然后在会话超时发生之前登录Web应用程序。
  5. 然后登录后我看到了预期的URL:localhost:8080 / SecurityWeb / index.jsp
  6. 这不符合预期:

    1. 登录的工作原理如下:
    2. 在浏览器中调用URL localhost:8080 / SecurityWeb /
    3. 然后登录页面显示在浏览器中。
    4. 等待会话超时发生。
    5. 然后登录Web应用程序。
    6. 然后登录后我看到了不期望的URL:localhost:8080 / SecurityWeb / j_security_check
    7. 问题: 要解决这个问题需要做些什么?

      snip from web.xml :
      
      
      <display-name>SecurityWeb</display-name>
      
      <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <security-constraint>
      
          <web-resource-collection>
      <web-resource-name>All</web-resource-name>
      <url-pattern>/*</url-pattern>
      </web-resource-collection>
      
      <auth-constraint>
          <description>...</description>
          <role-name>administrator</role-name>
          <role-name>customer</role-name>
          </auth-constraint>
      
       </security-constraint>
      
      <login-config>
          <auth-method>FORM</auth-method>
          <form-login-config>
          <form-login-page>/login.jsp</form-login-page>
          <form-error-page>/error.jsp</form-error-page>
          </form-login-config>
        </login-config>
      
        <security-role>
          <description>Admin</description>
          <role-name>administrator</role-name>
        </security-role>
        <security-role>
          <description>Customer</description>
          <role-name>customer</role-name>
        </security-role>
      
      <session-config>
      <session-timeout>1</session-timeout>
      </session-config>
      
      +-------------------------------------------------+
      
      snip from login.jsp :
      
      <form method="post" ACTION="j_security_check">
      id: <input type="text" name="j_username" /> <br>
      pw: <input type="password" name="j_password" /> <br>
      <input type="submit" name="login" value="Login">
      </form>
      
      +-------------------------------------------------+
      
      Farisola
      

1 个答案:

答案 0 :(得分:0)

我正在寻找解决方案的错误位置,事实证明我所要做的就是添加一个空闲监视器,它是一个主要组件,在你的框架中找到相应的东西。因此,空闲监视器执行的操作是,当应用程序处于非活动状态并且会话超时时,它会在设置的时间间隔内倒计时,然后您可以触发事件以刷新用户所在的当前页面。这将解决问题。

有关更深入的解决方案,请参阅此Automatically perform action in client side when the session expires