Grails 2.2.5, плагин Shiro - нестандартный порт, вызывающий проблемы - PullRequest
0 голосов
/ 01 мая 2018

Мне очень трудно разобраться, что происходит с приложением Grails 2.2.5, в котором используется плагин Shiro (v.1.2.1). Это система, которая работает нормально в течение нескольких лет. Он находится за удаленным прокси-сервером nginx, который до сих пор прослушивал порты 80/443. Мы только что перенесли тестовую установку, и теперь она совместно использует сервер с установкой Apache, которая имеет эти порты, поэтому у нас nginx прослушивает порты 8070 для http и 8443 для https. В основном это работает, но есть некоторые загадочные проблемы с перенаправлениями, когда пользователь не аутентифицирован, и эти проблемы, похоже, исходят от Широ (хотя у меня возникают трудности с уверенностью).

По сути, происходит то, что, когда неаутентифицированный пользователь переходит к 'https://myapp.com:8443/admin/',, приложение Grails выдает перенаправление, которое переводит их в' https://myapp.com:8443/auth/login?targetUri=%2F', т.е. контекст удаляется. Это должно быть 'https://myapp.com:8443/admin/auth/login?targetUri=%2F', и так же на живом сервере, который использует стандартные порты (80/443). Фактически, когда я смотрю на заголовок Location в ответе, на самом деле он отвечает 'http://myapp.com:8070/auth/login?targetUri=%2F' (то есть с портом http, что не проблема, поскольку nginx обрабатывает SSL).

Поскольку мой код в AuthController.groovy на самом деле не участвует, пока не получит запрос / auth / login, эта проблема, похоже, не возникает нигде в моем коде и должна исходить от Shiro плагин. Но почему нестандартный порт вызывает эту проблему (убирает контекст)? И что еще более важно, что я могу сделать, чтобы решить это?

1 Ответ

0 голосов
/ 03 мая 2018

Я думаю, что я мог ошибочно приписывать вину Shiro или плагину Shiro здесь. Я решил проблему, которая, кажется, вызвана причудой в самом Grails.

В версии 1 Grails нужно было правильно установить grails.serverURL в Config.groovy, чтобы перенаправления работали правильно, но с версией 2, которая больше не нужна, и фактически это свойство было закомментировано в новой создано приложение.

Однако то, что было сделано, похоже, не очень хорошо работает с нестандартными портами. Если порт сервера что-то вроде 8070 или 8443, как я использовал, перенаправление неправильно сформировано.

Я решил проблему, восстановив файл grails.serverURL и убедившись, что он настроен правильно. Теперь перенаправления снова работают как надо.

...