我有一个 grails 3 应用程序,包括 spring security,我最近将其升级到 grails 4。
我的application.yml
包括以下内容:
environments:
test:
grails:
plugin:
springsecurity:
active: false
security:
ignored: '/**'
basic:
enabled: false
spring:
security:
enabled: false
为什么这在 Grails 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 security core 插件实际上被禁用了。插件类中的以下代码被执行:
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 bean 正在构建中,但 Spring 仍在使用 MWSCA 默认 bean。