0

我正在使用Tuckey URLRewriteFilter。在我的应用程序中,我有以下页面和按钮:

  1. inside.xhtml应用程序上下文中的页面: http ://example.com/app/inside.xhtml
  2. outside.xhtml应用程序上下文之外的页面: http ://example.com/outside.xhtml
  3. 页面http://example.com/app/login.xhtmllogin.xhtml _
  4. A login buttonon outside.xhtmlpage 转到该login.xhtml页面。
  5. 页面http://example.com/app/profile.xhtmlprofile.xhtml _
  6. 一个logout buttonprofile.xhtml页面上去的inside.xhtml页面。

umlrewrite.xhtml文件中,我有以下规则可以重定向inside.xhtmloutside.xhtml

<rule>
    <note>
        Requests to /app/inside.xhtml will be redirected to ./../../outside.html
    </note>
    <from>/app/inside.xhtml</from>
    <to type="redirect">./../../outside.html</to>
</rule>

我的逻辑是用户在login.xhtml页面登录后,他将被重定向到profile.xhtml页面。我期望发生的是以下流程:

  1. 冲浪到outside.xhtml.
  2. 点击login button进入login.xhtml并登录。
  3. 登录成功即可到达profile.xhtml
  4. 点击logout button前往inside.xhtml
  5. 被重定向到outside.xhtml.

然而,实际发生的是:

  1. 冲浪到outside.xhtml.
  2. 点击login button进入login.xhtml并登录。
  3. 突然被重定向回outside.xhtml.
  4. 单击login button以转到login.xhtml并再次登录(该应用未记录我的登录)。
  5. 登录成功即可到达profile.xhtml
  6. 点击logout button前往inside.xhtml
  7. 被重定向到outside.xhtml.

2如果我一步一步地继续做,上述情况会反复发生7

没有那个<rule>,我总是被profile.xhtml正确地重定向到成功登录的页面。

如果您能就这个问题给我一些建议,我将不胜感激。

更新:

在我的应用程序中,为了跟踪logged in状态,我有一个@SessionScoped托管 bean,其中包含一个记录状态的简单方法:

public void recordUserLoggedIn(HttpServletRequest request) {
    HttpSession clientSession = request.getSession();
    clientSession.setAttribute("isLogin", true);
}
4

1 回答 1

0

您没有指定如何跟踪“登录”状态。您是否使用自定义 cookie?依赖应用服务器的内置会话处理(也可能基于 cookie)?

问题的最可能原因与您如何跟踪登录状态以及该状态如何在您的各个页面和上下文之间传递有关。(特别是在从登录状态转换到 profile.xhtml 时。)请记住,cookie 可以是基于路径的。

要调试您的问题:

  • 如果您使用的是浏览器,请使用firebug / developer-tools并观看网络选项卡。尤其要查看在流程的每个步骤中设置的各种标题。

  • 如果不使用浏览器,请尝试使用CharlesFiddler等代理。

我认为通过在您的流程中观察 HTTP 标头,潜在的问题将变得显而易见。

于 2013-03-11T17:59:23.353 回答