2

我有一个 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。

4

1 回答 1

0

试试这个

grails-app/conf/application.groovy

environments {
    development {

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

    }
}
于 2020-03-19T16:43:40.767 回答