首页 > 解决方案 > 响应重定向(302)在角度不起作用

问题描述

我通过angular设计了一个SSO(Single Sign-On)的登录页面,以及由spring boot框架单独开发的登录服务。

在 Angular 应用程序中,当提交登录表单时,通过 HttpClient 模块使用 post-HttpMethod 调用登录服务。在登录服务中,如果用户名和密码正确,则在登录服务的结果中,将响应状态设置为 302,并在响应的标头中添加特定的 URL。在这种情况下,我希望浏览器重定向到特定的 URL,但这并没有发生。

我在 Firefox 中跟踪请求和响应与附图相同 Firefox 网络选项卡

  1. 发送登录后请求,其响应为 302,标头位置为服务器响应中设置的特定 URL
  2. 浏览器向响应头的位置 URL 发送选项请求并获得 200 结果
  3. 浏览器向目标 URL 发送 get 请求(header location 为特定 URL),此时浏览器并没有打开目标 URL,只是响应为 200。

我更改了响应的 Location 标头,发现重定向没有做(只是登录请求和选项请求完成),下图是请求跟踪。 Firefox 网络选项卡

标签: angularresthttprequest

解决方案


我怀疑您的请求是 XHR 请求。如果是这样,浏览器会在处理程序中跟随它们,但不会将整个页面导航到重定向位置。

如果您想模拟为整个页面请求发送重定向时发生的情况,您可能需要更改后端,以便它返回 200,其中包含有效负载中原始重定向的目标位置,然后将页面重新加载到该位置位置(类似window.location = payload.redirectLocation)。

您还可以摆脱重定向,让后端根据身份验证成功返回 200 或 401,然后使用角度路由器导航。


推荐阅读