【发布时间】: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