0

我正在为nexus oss编写一个插件,我正在做response.sendRedirect如下

String redirectUrl = url + "#nexus-search;gav"
    + "~net.collab.builds~teamforge~~~~"
    + "?" + req.getQueryString();   

response.sendRedirect(response.encodeRedirectURL(redirectUrl));

形成的重定向 url 就像

http://domain/nexus/index.html#nexus-search;gav~net.collab.builds~teamforge~~~~?sfId=prpl1106&sfLoginToken=A237421CF755183D177F5C020752040F&isLoggedIn=true

我在这里做的是附加旧请求对象中存在的查询字符串,并附加到新的 url 并重定向到它。

但是我无法理解的是,redirecturl 当新的重定向 url 被命中时,我没有得到查询字符串。我放了断点,发现重定向 url 完成后,当它被处理时,查询字符串为空。

以下是疑问:

1)我做错了什么导致查询字符串消失?

为了查看重定向是否顺利,我做了request.getCookie并发现 cookie 与旧请求中一样存在。那么我哪里错了?我的新网址的查询字符串去哪儿了?

2)重定向的url是否也有paramterMap旧请求对象中的那个。目前paramterMap重定向的 url 中也为 null。我是否应该明确地从旧请求对象中获取并在重定向期间将其作为响应。如何使旧请求对象中的参数映射也在重定向过程中发送。

我的调试更新:

当我使用 #nexus 访问 url 时,好像发生了一些奇怪的事情。

我已将其作为nexus oss中的问题记录在 jira 中。

4

1 回答 1

1

雅找到了解决方案。

问题在于查询字符串的附加位置。在代码中,我在片段之后附加了查询字符串(# 符号后面的部分)。从搜索中我发现

http://blog.httpwatch.com/2011/03/01/6-things-you-should-know-about-fragment-urls/ https://www.rfc-editor.org/rfc/rfc3986#section- 3.5

所以这意味着在生成请求对象时不会考虑片段。他们实际上被抛弃了。

所以解决方案是在正确的位置附加查询字符串。准确地说,将它附加在片段之前。

String redirectUrl = url + "?" + req.getQueryString(); + "#nexus-search;gav" + "~net.collab.builds~teamforge~~~~" ;

所以这解决了我的问题。希望它对犯同样错误的其他人有用。谢谢

于 2013-10-21T07:02:12.377 回答