Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java URL重写筛选器的异常行为_Java_Jsf 2_Url Rewriting_Tuckey Urlrewrite Filter - Fatal编程技术网

Java URL重写筛选器的异常行为

Java URL重写筛选器的异常行为,java,jsf-2,url-rewriting,tuckey-urlrewrite-filter,Java,Jsf 2,Url Rewriting,Tuckey Urlrewrite Filter,我正在使用。在我的应用程序中,我有以下页面和按钮: 页面inside.xhtml位于应用程序上下文中: 页面outside.xhtml在应用程序上下文之外: 页面login.xhtmlat 在outside.xhtml页面上的login按钮转到login.xhtml页面 页面profile.xhtmlat profile.xhtml页面上的logout按钮,进入内部.xhtml页面 在umlrewrite.xhtml文件中,我有以下规则要从inside.xhtml重定向到external.xht

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

  • 页面
    inside.xhtml
    位于应用程序上下文中:
  • 页面
    outside.xhtml
    在应用程序上下文之外:
  • 页面
    login.xhtml
    at
  • outside.xhtml
    页面上的
    login按钮
    转到
    login.xhtml
    页面
  • 页面
    profile.xhtml
    at
  • profile.xhtml
    页面上的
    logout按钮
    ,进入
    内部.xhtml
    页面
  • umlrewrite.xhtml
    文件中,我有以下规则要从
    inside.xhtml
    重定向到
    external.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>
    

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

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

    要调试您的问题,请执行以下操作:

    • 如果您使用的是浏览器,请使用/并查看“网络”选项卡。特别是查看流程中每个步骤设置的各种标题

    • 如果不使用浏览器,请尝试使用类似或的代理


    我认为,通过在流程中观察HTTP头,潜在的问题将变得明显。

    我已经更新了我的答案。这就是你需要的吗?需要注意的是,如果没有
    规则
    ,一切都正常工作。我想我应该正确地记录
    登录
    状态。您的更新表明您依赖于容器的会话处理。我的最佳猜测是,您的容器将会话cookie设置为当前路径(“/app”)。然后重定向到父级时,会话将丢失,直到您再次登录。不过这只是猜测而已。您真的需要根据我的回答查看HTTP请求中的cookie头。如果更简单,您还可以尝试在流程的各个阶段记录会话ID。我的猜测是,即使你不期望它会改变。
    public void recordUserLoggedIn(HttpServletRequest request) {
        HttpSession clientSession = request.getSession();
        clientSession.setAttribute("isLogin", true);
    }