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
atoutside.xhtml
页面上的login按钮
转到login.xhtml
页面profile.xhtml
atprofile.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);
}