Безопасность канала Grails, вызывающая цикл перенаправления

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

//BuildConfig.groovy
compile "org.grails.plugins:spring-security-core:2.0.0"

и я только что добавил

///Config.groovy
grails.plugin.springsecurity.secureChannel.definition = [
    '/**': 'REQUIRES_SECURE_CHANNEL'

Когда я пытаюсь зайти на localhost:8080/myapp, он перенаправляет меня на https://localhost:8443/myapp , но я получаю сообщение "Эта веб-страница имеет цикл перенаправления ERR_TOO_MANY_REDIRECTS".

Я добавил операторы печати в свой SecurityFilters.groovy и вижу бесконечный цикл.

baseFilter(controller: "*", action: "*") 
    {
        before = {  
            println "baseFilter"
            // If auth controller then ok to continue
            if (controllerName.equals("auth"))
            {
                return true;
            }

            // If no subject (user) and not auth controller then user must authenticate
            if (!session.subject && !(controllerName.equals("auth")))
            {
              params.targetUri = request.forwardURI - request.contextPath
              if (params.action=="profile") {
                params.targetUri=params.targetUri + "?page=" + params?.page
              }
              else if (params.action=="results") {
                params.targetUri="/home"
              }
              println "baseFilter: Redirecting: PARAMS = $params"
              redirect(controller:'auth', action:'login', params: params)
              return false;
            }
        }
    }

Это просто:

baseFilter
baseFilter: Redirecting: PARAMS = [action:auth, format:null,  controller:login, targetUri:/login/auth]

Снова и снова.

Я пробовал много других вещей, которые я нашел на Stackoverflow и других веб-сайтах, но они либо не работают, либо слишком сложны.

Спасибо.


person dead_jake    schedule 03.02.2016    source источник
comment
Проверьте настройку grails.serverURL. Убедитесь, что он настроен на использование https в вашем Config.groovy   -  person Joshua Moore    schedule 03.02.2016
comment
Настройка grails.serverURL отсутствует. Я добавил grails.serverURL = https://localhost:8443/myapp, но все равно получаю ту же ошибку.   -  person dead_jake    schedule 03.02.2016
comment
Вы запускаете приложение по https?   -  person allthenutsandbolts    schedule 03.02.2016
comment
Попытка использовать этот параметр в dev grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = false   -  person allthenutsandbolts    schedule 03.02.2016
comment
@allthenutsandbolts Я использую параметр -https. Я попробовал этот параметр useHeaderCheckChannelSecurity, но все равно получаю ошибку перенаправления.   -  person dead_jake    schedule 03.02.2016
comment
Я думаю, что часть проблемы в том, что вы заставляете все проходить через безопасный канал. Существует вероятность того, что какой-то URL-адрес работает незащищенным, и поэтому он продолжает перенаправлять. Попробуйте явный URL-адрес, который вы хотите защитить, вместо того, чтобы делать одеяло /**. Есть еще один параметр, который у меня был grails.plugin.springsecurity.portMapper.httpsPort = 443. Посмотрите, работает ли он.   -  person allthenutsandbolts    schedule 03.02.2016
comment
Теперь у меня есть следующие настройки в моем Config.groovy grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = false grails.plugin.springsecurity.portMapper.httpsPort = 8443 grails.plugin.springsecurity.secureChannel.definition = [ '/login/': 'REQUIRES_SECURE_CHANNEL', '/login/auth': 'REQUIRES_SECURE_CHANNEL'] но я все еще получаю ту же проблему.   -  person dead_jake    schedule 03.02.2016
comment
После установки этого URL вы получаете доступ?   -  person allthenutsandbolts    schedule 03.02.2016
comment
Я пробовал как https://localhost:8443/myapp, так и http://localhost:8080/myapp. Когда я пробую второй, он перенаправляет меня на первый, но я получаю сообщение об ошибке.   -  person dead_jake    schedule 04.02.2016
comment
Как вы запускали свое приложение? Использует ли он приложение для запуска Grails?   -  person Quchie    schedule 04.02.2016
comment
@qusyairi 'приложение для запуска Grails -https'   -  person dead_jake    schedule 04.02.2016
comment
Здравствуйте, вам действительно нужен SecurityFilters.groovy? или это просто псевдокод для тестирования? причина, по которой у вас много перепечатанных утверждений, заключается в том, что другие активы (изображения или css и js) были загружены с использованием URL-адреса сервера, и вместе с ним используется логика SecurityFilters. Может быть, в вашем случае подойдет более конкретный URL-адрес в фильтре?   -  person Quchie    schedule 04.02.2016


Ответы (1)


Итак, это не ответ на вопрос, но мне удалось добиться того, что я пытался сделать, а именно заставить SLL и перенаправить любые попытки использовать http. Я сделал это с помощью плагина shiro, который уже использовался моим приложением. В Buildconfig.groovy просто добавьте compile ":shiro:1.2.1" к своим плагинам. В config.groovy я добавил следующие свойства:

security { 
    shiro { 
        filter { 
            loginUrl = "/login" 
            successUrl = "/" 
            unauthorizedUrl = "/unauthorized" 
            filterChainDefinitions = """
                                     /** = ssl[443]
                                     """ 
        } 
    } 
}

Вы можете изменить свои filterChainDefinitions, чтобы использовать ssl только для определенных URL-адресов. Я просто использовал /**, потому что мне всегда нужен SSL.

person dead_jake    schedule 26.02.2016