У меня было приложение 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 все еще используется весной.