【问题标题】:Stormpath Spring Boot redirect loopStormpath Spring Boot 重定向循环
【发布时间】:2016-01-19 20:27:20
【问题描述】:

使用 Stormpath 和 Spring Boot(基于 this tutorial),在我启动服务器并使用我的凭据成功登录后,一切正常。但是,当我退出浏览器并尝试打开我的应用程序时,我得到一个重定向循环。

minimal example is available here as an archive。这是一个 Gradle 项目。 cd 进入存档内的目录并使用./gradlew bootRun 启动服务器。该应用程序可通过http://localhost:8080 访问。为此需要 Stormpath API 密钥。注册 get an API key 并将 apiKey-XXX.properties 文件复制到 ~/.stormpath/apiKey.properties。这样,Spring Boot 会默认选择该文件并使用它(仅当您在 Stormpath 中定义了一个应用程序时)。

登录,然后退出浏览器(在 Mac 上不要只用红色按钮关闭它,使用 command-q 或右键单击浏览器图标并退出)。重新启动它并再次尝试访问http://localhost:8080。那是我得到重定向循环的时候。在 Mac 和 Windows、Firefox 和 Chrome 上尝试过,同样的情况。

如果我打开开发者控制台,我可以看到首先我被重定向到登录页面(很公平),然后我被重定向到 /(奇怪)等等......

当我第一次登录时,我可以看到一个名为 account 的 cookie 是为 localhost 和一个 JSESSIONID 创建的。当我重新启动浏览器时,account cookie 完好无损,JSESSIONID 由服务器重新生成。所以我猜这种行为与JSESSIONID绑定到登录会话或其他东西有关。

有没有办法配置这种行为?重新启动浏览器后,用户应该 a) 仍然登录或 b) 能够再次登录。有什么想法吗?

另外,顺便说一句,我使用 AngularJS 应用程序作为我的前端。我不认为这应该有任何区别,但我认为它可能很重要(示例应用为此包含一些 AngularJS hello world 代码)。

更新

该问题已被 Stormpath 标记为错误,在 com.stormpath.spring:stormpath-default-spring-boot-starter:1.0.RC8.1 发布后,该问题现已得到修复。 See the following answer and the comments for more detail.

【问题讨论】:

  • 与SpringSecurity有冲突吗?
  • Tomcat 8.0.30 中有一个错误可能会导致这样的行为。请参阅github.com/spring-projects/spring-boot/issues/4937 了解更多详细信息以及可能值得一试的解决方法
  • 我还不能运行你的应用程序,但是在quickstart 他们说如果你有多个 API 密钥,你应该在application.properties 中设置一个stormpath.application.href - 我在链接源中找不到该配置
  • @Raffaele 检查this link 可能的设置。
  • @AndyWilkinson 我认为这不是 Tomcat 问题。在我的开发机器上,我有一个使用 Jetty 而不是 Tomcat 的实际应用程序,我遇到了同样的问题。

标签: angularjs redirect spring-boot stormpath redirect-loop


【解决方案1】:

我是 Stormpath 的 Java 开发人员宣传员。

我无法使用您的 zip 文件复制该行为。

但是,我们之前见过这种情况。这与浏览器积极缓存 302 重定向有关,尤其是针对 localhost

以下是在 Chrome 中解决该问题的参考:http://kmarsden.com/chrome-redirect-cache/

清除缓存应该可以解决问题。

而且,这永远不会在生产环境中发生。

gif of Firefox interaction

【讨论】:

  • 感谢您的回复,将查看缓存的内容。已经考虑过了 - 我在 Chrome 的开发人员工具栏中禁用了缓存,有一个设置可以做到这一点,但无济于事。我会再试一次,也许我忽略了一些东西。另外,您介意在 Chrome 中快速尝试一下吗? :)
  • 如果我启用 Firefox 的“退出时清除历史记录”功能,我可以复制您的行为。这样JSESSIONIDaccount cookie 就被清除了,当我重新启动浏览器时,我必须重新登录。我想这很好,但是在 Firefox 中(对于每个主机)启用在退出时清除 cookie 有点不好在我看来。 :/ 此外,使用 Chrome 的开发设置清除缓存不起作用。
  • 我已经确认您在使用全新 chrome 安装时看到的行为。我在这里记录了一个问题:github.com/stormpath/stormpath-sdk-java/issues/450 我相信问题是帐户 cookie 将您标识为登录到 Stormpath,但它与 Spring Security 上下文无关。 Spring Security 将/ 重定向到/login(应该如此)。 Stormpath 认为您已登录,因此 /login 将您重定向回 /。问题解决后我会跟进。
  • this PR 待审核,今晚晚些时候我将发布 1.0.RC8.1。这解决了重定向循环。
  • 嘿Kohányi:我已经发布了Java SDK,版本1.0.RC8.1。它应该在一小时内传播到 Maven Central。感谢您提请我们注意!
猜你喜欢
  • 2021-08-03
  • 2017-03-04
  • 1970-01-01
  • 2015-01-12
  • 2019-08-05
  • 2015-03-10
  • 1970-01-01
  • 2018-08-03
  • 2019-10-22
相关资源
最近更新 更多