【问题标题】:Redirection by Pretty Faces由漂亮面孔重定向
【发布时间】:2012-10-18 21:56:14
【问题描述】:

我遇到了一个问题,Pretty Faces 会导致无限循环,由我的浏览器结束:Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

问题的确切原因

文件结构

pretty-config.xml 片段

<url-mapping id="login">
    <pattern value="/login" />
    <view-id value="/login/login.xhtml" />
</url-mapping>

<url-mapping id="register">
    <pattern value="/register" />
    <view-id value="/login/register.xhtml" />
</url-mapping>

说明

导航到localhost:8080/register 将打开我的网页。 导航到localhost:8080/login 将导致所描述的循环,请注意导航将导致重定向到localhost:8080/login/

我猜,localhost:8080/login 是对文件夹 login 的请求。但我不知道如何解决,所以我对localhost:8080/login 的请求将导致网页。

提前致谢。

【问题讨论】:

  • 你能发布你的部署描述符吗?

标签: java jsf redirect prettyfaces


【解决方案1】:

我过去也遇到过这个问题。问题是您的 Servlet 容器。如果您请求像 /login 这样的 URL,您的容器会检查您的 Web 应用程序中是否有一个名为 login 的目录。如果是这样,它会将您重定向到/login/,因为容器认为您想要访问此目录。如果还有删除尾部斜杠的重写规则,您将看到这样的行为。

我知道这很奇怪,但是 tomcat 用户列表中的某个人写道,这种行为符合规范。

因此,唯一的解决方案是将映射中的 /login 更改为 /login/ 或重命名 Web 应用中的登录文件夹。

【讨论】:

  • 你似乎是对的,我在尝试一些过滤器时有点困惑。事实证明,确实(通过 Pretty Faces)重定向的请求不会再次通过 Pretty Faces,因此不会导致 Mael 描述的情况。
【解决方案2】:

我唯一的猜测是你的FacesServlet 被映射到*.xhtml 所以当一个请求被处理时,首先你的漂亮过滤器将它转发到你的 FacesServlet,但是,因为你的 xhtml 文件在路径中,所以转发是再次由您的漂亮过滤器无限处理。

要解决这个问题,请将您的视图放入 WEB-INF 文件夹并在您的 pretty.config.xml 中放入如下内容:

 <url-mapping id="login">
    <pattern value="/login/" />
    <view-id value="/WEB-INF/views/login.xhtml" />
 </url-mapping>

这样过滤器截取的路径和你的servlet不一样,因为客户端可以请求WEB-INF文件夹中的资源

【讨论】:

  • 你的权利,这将由 FacesServlet 再次处理。但是register 不也是这样吗?
  • 否,因为文件位于/login/register.xhtml,因此它与&lt;pattern value="/register" /&gt; 不匹配,因为文件路径中的尾随/login/
  • 哦,好吧,就像那样,我想我最后需要通配符。我现在完全理解了,谢谢 Mael!
  • 不,像“/login”这样的模式肯定不匹配转发到“/login/login.xhtml”的请求。转发的请求与映射模式不匹配。我认为这更有可能是我在下面的回复中描述的问题。
  • 这其实是一个真实的答案
猜你喜欢
  • 1970-01-01
  • 2011-05-25
  • 2015-03-30
  • 2010-11-18
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2017-09-13
相关资源
最近更新 更多