使用 URL 中的请求参数从页面重定向

Posted

技术标签:

【中文标题】使用 URL 中的请求参数从页面重定向【英文标题】:Redirecting from page with request parameters in the URL 【发布时间】:2013-12-16 01:15:45 【问题描述】:

我有几个具有相同主模板的页面,其中包含带有注销按钮的标题。当我尝试从所有页面注销时,它可以正常工作,除了一个 - 在其 URL 中有请求参数的那个。

注销(会话失效)后,我将重定向回登录页面,如下所示:

return "/login.xhtml?faces-redirect=true";

当我在这样的 URL 上按注销时,

http://localhost:8080/WPA_MOVIEDATABASE/app/index.xhtml

然后重定向工作正常,我最终进入:

http://localhost:8080/WPA_MOVIEDATABASE/login.xhtml

但是,当我在带有这样的请求参数的 URL 上按注销时,

http://localhost:8080/WPA_MOVIEDATABASE/app/movie.xhtml?id=135

然后我被重定向回没有查询字符串的相同 URL:

http://localhost:8080/WPA_MOVIEDATABASE/app/movie.xhtml

我的重定向是错误的,还是这类 URL 的正常行为?

【问题讨论】:

您是否暗示http://localhost:8080/WPA_MOVIEDATABASE/app/movie.xhtml?id=135 在您通过在浏览器的地址栏中输入/复制粘贴该 URL 直接打开它时不会给出 404,而不是被重定向到它? @BalusC 输入该页面工作正常,但是当我尝试从该页面注销时,我得到 404。 @BalusC 我编辑了问题,希望现在问题会更清楚。 确实好多了!重定向的结果 URL 是什么? (正如您在浏览器的地址栏中看到的那样)。两种情况都一样吗? @BalusC 当它正确重定向时:http://localhost:8080/WPA_MOVIEDATABASE/login.xhtml 但对于 404 它只是剥离参数http://localhost:8080/WPA_MOVIEDATABASE/app/movie.xhtml 【参考方案1】:

在HTTP Server Monitor中我发现按下注销按钮后,首先有一个POST request

http://localhost:8080/WPA_MOVIEDATABASE/app/movie.xhtml

然后会跟随GET request

http://localhost:8080/WPA_MOVIEDATABASE/login.xhtml.

那时我知道问题出在退出按钮..

我正在使用:

<h:form>
   <h:commandLink value="Log out" action="#userBB.logout"/>
</h:form>

将代码更改为以下解决了问题:

<h:button value="LOG OUT" outcome="#userBB.logout()" />

一百万感谢 BalusC,他的提示让我发现了真正的问题!

【讨论】:

嗯,你的问题真的解决了吗? HTTP 流量看起来不错。您的“解决方案”只是在打开页面时立即执行注销方法。 @BalusC 这两个请求将在按下注销按钮后触发。现在按下按钮后,只有/WPA_MOVIEDATABASE/login.xhtml的GET请求 您使用命令组件的初始代码是处理注销的正确代码。新代码就像您在视图中放置了一个普通的#userBB.logout(),所以这绝对不是问题的原因,也不是解决问题的方法。 @skuntsel 很好地使用命令组件,然后是对WPA_MOVIEDATABASE/app/movie.xhtml 的 POST 请求,没有触发 500 的参数。但是我认为过滤页面后不会出现此问题对于未登录的用户.. 我实际上是在尝试验证 url preRender,如此处所述***.com/questions/15068446/… 但如果完全省略参数,它似乎不起作用 所以问题似乎是点击链接时丢失的参数。默认情况下,它应该向带有参数的 url 发出 POST 请求。您可以尝试使用 h:commandButton 而不是 h:commandLink(可能是一些配置/编码错误导致 commandLink js 搞砸了参数)?

以上是关于使用 URL 中的请求参数从页面重定向的主要内容,如果未能解决你的问题,请参考以下文章

点击 bean 方法并在 GET 请求上重定向

在 servlet 过滤器中使用请求参数将 JSF ajax 请求重定向到 URL

使用来自 Keycloak 的 URL OIDC 参数重定向给出错误请求

重定向问题

java中的重定向是啥意思?

如何使用 JQuery 重定向,加载另一个页面但在请求中发送了一些 POST 参数?