0

使用 ICEFaces 1.8.2 和 Tomcat 6.0.24 我创建了一个 jspx 页面。此页面仅包含三个输入字段和一些输出文本。由于元刷新,该页面每 10 分钟重新加载一次。

当我在 FireFox 23 中打开页面并将其打开一段时间后,页面会被重定向到一个不存在的 URL,这会导致显示错误页面。URL buildserver/proef/terminal/sample... 被重定向到 buildserver/proef/terminal/inal/sample...

我的问题是:是什么导致页面被重定向到错误的 URL?Tomcat或ICEFaces有问题吗?

我没有使用 Apache 的网络服务器将 HTTP 流量重定向到 Tomcat。我什至看到在 Eclipse 中运行 Tomcat 时发生了重定向。

下面总结一下使用 Wireshask 捕获的浏览器和 Tomcat 之间的通信:

GET /proef/terminal/sample_label_print.jspx?location=004-PRODEE HTTP/1.1

Host: buildserver
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: JSESSIONID=57AC0E6B2F86B115AE984F3B7E7FBA93; ice.sessions=; updates=; ice.lease=1380208450505; JSESSIONID.8be0fa73=1f4e10ca702da469c4b0c37f42905d6a; screenResolution=1680x1050; JSESSIONID.48b2edef=c66cf618a1d31a7cef66687c8f6c0550; bconn=Bv54BVUkcK2uDN4y25NcvA:50:acquired
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.1 302 Moved Temporarily

Server: Apache-Coyote/1.1
Pragma: no-cache
Cache-Control: no-cache
Expires: 0
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: must-revalidate
Location: http://buildserver/proef/terminal/inal/sample_label_print.jspx
Content-Type: text/html;charset=UTF-8
Content-Length: 0
Date: Thu, 26 Sep 2013 15:14:06 GMT


GET /proef/terminal/inal/sample_label_print.jspx HTTP/1.1

Host: buildserver
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: JSESSIONID=57AC0E6B2F86B115AE984F3B7E7FBA93; ice.sessions=; updates=; ice.lease=1380208450505; JSESSIONID.8be0fa73=1f4e10ca702da469c4b0c37f42905d6a; screenResolution=1680x1050; JSESSIONID.48b2edef=c66cf618a1d31a7cef66687c8f6c0550; bconn=Bv54BVUkcK2uDN4y25NcvA:50:acquired
Connection: keep-alive
Cache-Control: max-age=0


HTTP/1.1 500 Internal Server Error

Server: Apache-Coyote/1.1
Pragma: no-cache
Cache-Control: no-cache
Expires: 0
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: must-revalidate
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 26 Sep 2013 15:14:06 GMT

任何帮助表示赞赏。

4

1 回答 1

0

最后我自己找到了问题的原因。在我的 web.xml 中,我指定了两个 url 模式:需要授权的 /abc/* 和不需要授权的 /terminal/*:

<security-constraint>
    <web-resource-collection>
        <url-pattern>/abc/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <url-pattern>/terminal/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
</security-constraint>

重现问题的场景:

  • 在一个浏览器中打开两个页面:abc/one.jspx 和 /terminal/two.jspx
  • 登录 abc/one.jspx
  • 切换到 terminal/two.jspx 并触发一个动作
  • 现在 terminal/two.jspx 被重定向到 terminal/inal/two.jspx

我通过更改 web.xml 中的 URL 模式来解决问题,使它们具有相同的长度:而不是/terminal/*我使用/trm/*.

Tomcat 混合了 URL 模式。这是 Tomcat 中的错误还是未记录的功能?

于 2013-10-01T09:43:29.807 回答