2016-01-19 8 views
2

Использование Stormpath и Spring Boot (основано на this tutorial), после того как я запустил свой сервер и успешно вошел в систему с моими учетными данными, все работает нормально. Однако, когда я выхожу из браузера и пытаюсь открыть мое приложение, я получаю цикл перенаправления.Stormpath Spring Boot redirect loop

A minimal example is available here as an archive. Это проект «Грейдл». cd в каталог внутри архива и запустите сервер с ./gradlew bootRun. Приложение будет доступно по адресу http://localhost:8080. Для этого необходим ключ API Stormpath. Зарегистрируйтесь, get an API key и скопируйте файл apiKey-XXX.properties в ~/.stormpath/apiKey.properties. Таким образом Spring Boot подберет файл и будет использовать его по умолчанию (только если у вас есть одно приложение, определенное в Stormpath, то есть).

Войдите в систему, затем закройте браузер (на Mac не просто закрывайте ее красной кнопкой, используйте команду-q или щелкните правой кнопкой мыши значок браузера и выйдите из нее). Перезагрузите его и повторите попытку доступа http://localhost:8080. Вот когда я получаю цикл перенаправления. Пробовал это на Mac и Windows, Firefox и Chrome, то же самое происходит.

Если открыть консоль разработчика я могу видеть, что первый я перенаправлены на страницу входа в систему (достаточно справедливой), то я перенаправлены на / (Wierd) и так далее ...

Когда я войдите в первый раз, когда я вижу, что файл cookie с именем account создан для localhost и JSESSIONID тоже. Когда я перезапускаю браузер, cookie account не поврежден, а JSESSIONID регенерируется сервером. Поэтому я предполагаю, что это поведение связано с тем, что JSESSIONID привязан к сеансу входа в систему или что-то в этом роде.

Есть ли способ настроить это поведение? После перезапуска браузера пользователь должен быть a) все еще зарегистрирован или b) иметь возможность снова регистрироваться. Есть идеи?

Кроме того, на боковой ноте я использую приложение AngularJS в качестве моего интерфейса. Я не думаю, что это должно иметь какое-то значение, но я, хотя это может быть важно (пример приложения содержит некоторый код мира AngularJS hello для этого конца).

Update

Этот вопрос был помечен как ошибка по Stormpath и после выхода com.stormpath.spring:stormpath-default-spring-boot-starter:1.0.RC8.1 она теперь исправлена. See the following answer and the comments for more detail.

+0

Есть ли конфликт с SpringSecurity? – Raffaele

+0

В Tomcat 8.0 есть ошибка.30, которые могут вызвать подобное поведение. См. Https://github.com/spring-projects/spring-boot/issues/4937 для получения дополнительной информации и возможного обходного пути, которое может стоить попробовать. –

+0

Я еще не смог запустить приложение, но в [ quickstart] (https://docs.stormpath.com/java/spring-boot-web/quickstart.html), они сказали, что вы должны установить 'stormpath.application.href' в свой' application.properties', если у вас есть больше, чем один ключ API - и я не могу найти эту конфигурацию в связанных источниках. – Raffaele

ответ

2

Я - проповедник Java Developer Stormpath.

Я не смог воспроизвести поведение, используя ваш zip-файл.

Однако у нас есть видел это раньше. Это связано с тем, что браузеры настойчиво кэшируют перенаправления 302, особенно против localhost.

Вот ссылка, которая обращается к этому вопросу в Chrome: http://kmarsden.com/chrome-redirect-cache/

Очистка кэша следует позаботиться о проблеме.

И это было бы никогда не произошло в производственной среде.

gif of Firefox interaction

+0

Спасибо за ответ, посмотрим на кеширование. Уже подумал - я отключил кеширование в панели инструментов разработчика Chrome, есть настройка для этого, но безрезультатно. Я попробую еще раз, может быть, я что-то упустил. Кроме того, не могли бы вы быстро попробовать его в Chrome? :) –

+0

Я могу воспроизвести ваше поведение, если я включу функцию «Очистить историю при выходе» Firefox. При этом файлы cookie 'JSESSIONID' и' account' очищаются, и когда я перезапускаю браузер, я должен войти в систему. Я думаю, что это нормально, но включение очистки файлов cookie при выходе из Firefox (для каждого хоста) является своего рода * Нехорошо * на мой взгляд. :/Кроме того, использование настроек браузера Chrome для очистки кеша не работает. –

+1

Я подтвердил поведение, которое вы видите, используя новую установку chrome. Я зарегистрировал проблему здесь: https://github.com/stormpath/stormpath-sdk-java/issues/450 Я полагаю, что проблема заключается в том, что куки-файл учетной записи идентифицирует вас как зарегистрированный в Stormpath, но он не связан с Весенний контекст безопасности. Spring Security перенаправляет '/' на '/ login' (как и должно быть). Stormpath считает, что вы вошли в систему, поэтому '/ login' перенаправляет вас обратно на'/'. Я буду следить, как только проблема будет решена. – afitnerd