【问题标题】:How do I disable spring security in a Grails 4 integration test?如何在 Grails 4 集成测试中禁用 spring 安全性?
【发布时间】:2020-06-28 23:07:03
【问题描述】:

我有一个包含 spring security 的 grails 3 应用程序,我最近将其升级到 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.

似乎启用了 spring 安全性,它正在使用 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:

ManagementWebSecurityConfigurerAdapter 正在使用默认配置设置 CSRF 过滤器。

我尝试将以下内容添加到resources.groovy

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

这并没有解决问题。虽然我的匿名 WSCA bean 正在构建中,但 Spring 仍在使用 MWSCA 默认 bean。

【问题讨论】:

  • 你用的是什么版本的spring security插件?
  • 感谢您的回复! grails 插件版本是 3.2.3。我已将我的 gradle 依赖项中的 sn-p 添加到 OP。
  • 在 Grails 4 中,您将需要使用 4.x 的插件。目前我认为 4.0.0 可能是最新的。
  • 您在 Config.groovy 中尝试过以下一项吗? grails.plugin.springsecurity.active = false
  • "我可以试着把这个设置放在我的 application.yml 中,看看它是否能接受。" - 原始问题包括“我的 application.yml 包括以下内容”。我以为你已经在那里进行了设置。

标签: spring-boot grails spring-security integration-testing grails-4


【解决方案1】:

试试这个

grails-app/conf/application.groovy

environments {
    development {

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

    }
}

【讨论】:

  • @JeffScottBrown 是正确的,此设置已在我的应用的 YML 文件中
猜你喜欢
  • 2020-04-05
  • 2011-10-22
  • 2016-01-02
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
相关资源
最近更新 更多