Как отключить пружинную безопасность в интеграционном тесте Grails 4? - PullRequest
0 голосов
/ 17 марта 2020

У меня было приложение Grails 3, включая Spring Security, которое я недавно обновил до Grails 4.

My application.yml включает следующее:

environments:
    test:
        grails:
            plugin:
                springsecurity:
                    active: false
        security:
            ignored: '/**'
            basic:
                enabled: false
        spring:
            security:
                enabled: false

Почему это не работает в Граале 4? Что является хорошим альтернативным решением?

Grails 4, похоже, игнорирует эту конфигурацию. Когда я запускаю интеграционные тесты, я получаю сообщение об ошибке 403 с сообщением:

Could not verify the provided CSRF token because your session was not found.

Похоже, пружинная защита включена, и она использует SecurityFilterAutoConfiguration, которая обычно исключается для мое приложение.

Обновление

Я использую следующие зависимости:

    compile('org.grails.plugins:spring-security-core:3.2.3') {
        exclude group: 'org.springframework.security'
    }
    compile ('org.springframework.security:spring-security-core:4.2.13.RELEASE') {
        force = true
    }
    compile 'org.springframework.security:spring-security-web:4.2.13.RELEASE'
    compile 'org.springframework.security:spring-security-config:4.2.13.RELEASE'

Обновление 2:

В моем отладчике я обнаружил, что плагин ядра безопасности Spring отключен . Выполнен следующий код из класса плагина:

SpringSecurityUtils.resetSecurityConfig()
        def conf = SpringSecurityUtils.securityConfig
        boolean printStatusMessages = (conf.printStatusMessages instanceof Boolean) ? conf.printStatusMessages : true
        if (!conf || !conf.active) {
            if (printStatusMessages) {
                // <-- the code in this block is executed; active flag is false
                String message = '\n\nSpring Security is disabled, not loading\n\n'
                log.info message
                println message
            }
            return
        }

... однако, я все еще получаю сообщение об ошибке фильтра CSRF, поэтому Spring Security должен каким-то образом настраиваться самостоятельно.

Обновление 3:

Фильтр CSRF настраивается с помощью ManagementWebSecurityConfigurerAdapter с использованием конфигурации по умолчанию.

Я попытался добавить следующее к resources.groovy:

    if (grailsApplication.config.disableSecurity == true && !Environment.isWarDeployed()) {
        webSecurityConfigurerAdapter(new WebSecurityConfigurerAdapter(true) {})
    }

Это не решило проблему. Хотя мой анонимный бин WSCA создается, бин по умолчанию MWSCA все еще используется весной.

1 Ответ

0 голосов
/ 19 марта 2020

Попробуйте это в

grails-app / conf / application. groovy

environments {
    development {

    }
    test {
        grails.plugin.springsecurity.active = false
    }
    production {

    }
}
...