Spring Security Grails перенаправляет на неправильный порт

В моем приложении Grails (2.3.11) моя страница входа отправляет запрос Ajax на:

https://myurl/my-app/j_spring_security_check

но spring-security перенаправляет на:

https://myurl:80/my-app/login/ajaxSuccess

Это приводит к ошибке тайм-аута (поскольку в URL-адрес добавлен порт 80). Эта проблема возникает только тогда, когда мой клиент обращается к приложению через своего диспетчера трафика (Big-IP); если они обращаются к приложению напрямую через IP-адрес сервера, оно работает правильно.

Есть ли какая-либо конфигурация, которую я могу выполнить в Grails, чтобы решить эту проблему? Я не уверен, связана ли эта проблема с приложением или с Big-IP.

Это мои конфиги (Config.groovy), связанные с плагином spring-security:

grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/login/authSucccessExtJs'
grails.plugins.springsecurity.successHandler.alwaysUseDefault = true
grails.plugins.springsecurity.failureHandler.defaultFailureUrl = '/login/authFailExtJs?login_error=1'
grails.plugins.springsecurity.password.algorithm = 'MD5'

person Edumelzer    schedule 24.08.2017    source источник


Ответы (1)


Проблема в том, что ваше приложение получает http-трафик, потому что вы разгружаете ssl на BIG-IP, поэтому оно возвращает http-ссылки вашему клиенту. Есть несколько возможных решений.

  1. Настройте Grails для установки всех URL-адресов на https, даже если запросы являются http
  2. Вставьте заголовок X-Forwarded-Proto: https (если Grails поддерживает это) в BIG-IP через локальную политику трафика или iRule (вы можете проверить это из curl, вставив туда заголовок, чтобы увидеть, помогает ли это)
  3. Перепишите URL-адреса с https на http на BIG-IP в ответном трафике через профиль потока или iRule. Это может быть очень проблематично с AJAX, но в остальном будет работать, однако вариант 1 или 2 будет гораздо более эффективным и требует меньше обслуживания.
person Jason Rahm    schedule 28.08.2017