Grails - безопасный канал ядра безопасности, вызывающий петлю перенаправления (на Heroku) - PullRequest
4 голосов
/ 01 февраля 2012

Я использую Spring-security-core и настроил возможности безопасного канала, которые отлично работают на моей машине для разработки.У меня есть следующее в Config.groovy

grails.plugins.springsecurity.secureChannel.definition = [
   '/order/checkout': 'REQUIRES_SECURE_CHANNEL',
   '/order/paymentComplete': 'REQUIRES_INSECURE_CHANNEL'
]

Кроме того, при развертывании в Heroku соответствующая обработка заказов работает отлично, до , пока я комментирую вышеприведенные строки.Как только я возвращаю их обратно, я получаю:

redirect error

Я вижу, что на сервер поступает много запросов, и сетевое представление Firebug показывает:

redirect network view

Я добавил PiggyBack SSL в Heroku, и я могу указать адрес https: // ... для перехода к другим частям сайта, в этом случаебраузер остается в режиме SSL.Но если я получаю доступ к адресу

https:/www.momentumnow.co/order/checkout 

напрямую, я получаю ту же проблему с циклом перенаправления.Знаете ли вы, в чем проблема или как я могу отладить это дальше.Если последнее, не могли бы вы обновить область комментариев, и я отвечу с обновлениями проблемной области.Благодаря

PiggyBack SSL документация указывает:

"Piggyback SSL позволит вам использовать https://yourapp.heroku.com,, поскольку он использует сертификацию * .heroku.com. Выне нужно покупать или настраивать сертификат, он просто работает. https://yourcustomdomain.com будет работать, но он выдаст предупреждение в браузере. "

Я, вероятно, переключусь на другой режим, так какЯ добавляю сертификат, однако, похоже, что это не является проблемой, основываясь на предыдущем утверждении.


На сервере я получаю:

enter image description here

Ответы [ 2 ]

6 голосов
/ 01 февраля 2012

Вам необходимо исправить значения для портов, так как они по умолчанию равны 8080 и 8443. См. Раздел «Безопасность канала» в документации - http://grails -plugins.github.com / grails-spring-security-core / docs / manual / - об атрибутах конфигурации grails.plugins.springsecurity.portMapper.httpPort и grails.plugins.springsecurity.portMapper.httpsPort.

1 голос
/ 14 марта 2014

Для всех, кто сталкивается с этой (как я) проблемой, является то, что ваше приложение на самом деле не получает запрос как HTTPS.Вместо этого Heroku заменяет HTTPS заголовком «X-Forwarded-Proto».HTTPS-перенаправление Spring-security затем помещает вас в бесконечный цикл перенаправления, потому что всегда обнаруживает запрос как HTTP.

Вы можете написать свой собственный SecureChannelProcessor, чтобы справиться с этим:

public class HerokuSecureChannelProcessor extends SecureChannelProcessor {

    @Override
    public void decide(FilterInvocation invocation, Collection<ConfigAttribute> config)
            throws IOException, ServletException {
        Assert.isTrue((invocation != null) && (config != null),
                "Nulls cannot be provided");

        for (ConfigAttribute attribute : config) {
            if (supports(attribute)) {
                String header = invocation.getHttpRequest().getHeader("X-Forwarded-Proto");
                if(header == null){
                    // proceed normally
                    if (!invocation.getHttpRequest().isSecure()) {
                        getEntryPoint().commence(invocation.getRequest(), invocation.getResponse());
                    }
                } else {
                    // use heroku header instead
                    if("http".equals(header)) {
                        getEntryPoint().commence(invocation.getRequest(), invocation.getResponse());
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...