Безопасность канала 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".

Я добавил операторы print в свой 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]

Вновь и вновь.

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

Спасибо.

1 ответ

Решение

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

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

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

Другие вопросы по тегам