链接URL(使用JSessionID)在URL重写期间被截断

时间:2012-02-14 19:24:52

标签: java google-app-engine wicket wicket-1.5

用户首次访问我的应用主页

http://[My domain]

会生成表单

的网址
http://[My domain]/main/PageHome;jsessionid=v_qqIGVQlKBbkNSOcHkAQw?0

没关系,但我主页上的每个链接都有表格的网址

http://[My domain]/main/..;jsessionid=v_qqIGVQlKBbkNSOcHkAQw?0-1.ILinkListener-lnkAbout

(此处复制的特定“关于我们”链接URL的长度为102个字符)。这些网址无效,因为存在两个点而不是PageHome来正确完成路径。

有什么方法可以配置GAE / J来抑制这个URL缩写,还是这个操作是Web框架的省?

作为一个(非常糟糕的)解决方法,我已经在我的链接的URL中编写了JSessionIDs的抑制,并且正在编写应用程序以在会话cookie被禁用时发出警告。但我会很感激任何指针。

Ian Marshall

我的操作环境

Web应用程序服务器:GAE / J 1.6.1.1(不是dev服务器)(我知道:它不是最新版本)
Web框架:Apache Wicket 1.5.3
产生上述效果的Web浏览器:
  ·Mozilla Firefox 10.0.1
  ·Microsoft Internet Explorer 8.0.6001.18702
  ·在运行Google Android 2.3.5的HTC Wildfire S上找到

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。通过使用以下方法覆盖我的应用程序类中的newWebRequest来修复它:

protected WebRequest newWebRequest(HttpServletRequest servletRequest,
        String filterPath) {
    WebRequest webRequest = super.newWebRequest(servletRequest, filterPath);
    return new ServletWebRequest(servletRequest, filterPath, webRequest.getUrl().canonical());
}

答案 1 :(得分:0)

Ian,重新创建问题的示例代码会有所帮助..

答案 2 :(得分:0)

我解决了这个问题。

我的所有网页都来自我的PageBase类,而后者又来自Wicket的WebPage。

·我通过停止在我的WebApplication

中覆盖来禁用我自动删除JSessionID
  public String ServletWebResponse.encodeURL(CharSequence url)

·在我的PageBase构造函数中,我确定是否检测到(会话)cookie存储与否。

·如果没有,那么我举起一个

  org.apache.wicket.RestartResponseException(final Class<C> pageClass)

显示我的PageCookiesDisabled。这会从包含“..”字符的无效URL中断“未找到”错误,这是我之前遇到过的。