【问题标题】:Grails, Cucumber, Geb, and Spring Security not working together properlyGrails、Cucumber、Geb 和 Spring Security 无法正常协同工作
【发布时间】:2015-03-18 05:46:46
【问题描述】:

我有一个使用 Spring Security 的 Grails 应用程序,我正在尝试使用 Cucumber/Geb 对其运行测试

当我使用 run-app 加载我的网站并导航到“MyProject/”时,它会将我重定向到索引页面(到目前为止还可以)

当我加载我的功能测试并导航到“MyProject/”时,它会将我重定向到 MyProject/login/auth 页面。

所以我的问题是,在开发模式下运行应用程序在 Spring Security 上运行良好,但是当我运行 test-app functional:cucumber 时,该站点认为我需要登录。

这是我的配置文件,其中包含我的 Spring Security 信息

grails.plugin.springsecurity.rejectIfNoRule = true
grails.plugin.springsecurity.fii.rejectPublicInvocations = true

grails.plugin.springsecurity.logout.postOnly = false
grails.plugin.springsecurity.password.bcrypt.logrounds = 15
grails.plugin.springsecurity.userLookup.userDomainClassName = 'myproject.User'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'myproject.UserRole'
grails.plugin.springsecurity.authority.className = 'myproject.Role'
grails.plugin.springsecurity.securityConfigType = "InterceptUrlMap"
grails.plugin.springsecurity.interceptUrlMap = [
'/':                              ['permitAll'],
'/index':                         ['permitAll'],
'/index.gsp':                     ['permitAll'],
'/assets/**':                     ['permitAll'],
'/**/js/**':                      ['permitAll'],
'/**/css/**':                     ['permitAll'],
'/**/images/**':                  ['permitAll'],
'/**/favicon.ico':                ['permitAll'],
'/login/**':                          ['permitAll'],
'/logout/**':                         ['permitAll']
]

和我的脚步

import static cucumber.api.groovy.EN.*
import pages.HomePage

Given(~/^I am on the home page$/) { ->
    to HomePage
    at HomePage
}

和我的页面

package pages

import geb.Page

class HomePage extends Page {
    static url = "MyProject/"

    static at = {
        title ==~ /Welcome to Grails/
    }

    static content = {

    }
}

test run-app 似乎工作正常,所以我必须相信它在我的 Cucumber/Geb 代码中或在某处的 test-app functional:cucumber 命令中

【问题讨论】:

    标签: grails spring-security geb cucumber-jvm


    【解决方案1】:

    尝试在 Spring Security 中打开调试选项以检查您的测试正在访问哪些资源。看起来测试正在尝试访问以下内容:http://localhost:8080/MyProject/MyProject 并且资源“/MyProject”未在 InterceptUrlMap 中映射,因此发生了悲观锁定。

    尝试更改此设置

    static url = "MyProject/" 
    

    到这里

    static url = "/MyProject"
    

    这两者之间有 区别。查看Geb docs 了解更多详情。

    顺便说一句,但是您的 Spring Security 配置中有错误。这两行:

    grails.plugin.springsecurity.rejectIfNoRule = true
    grails.plugin.springsecurity.fii.rejectPublicInvocations = true
    

    是互斥的。如果资源未明确映射,您可能希望返回 403(第一个选项)抛出异常(第二个选项)。更多详情:http://grails-plugins.github.io/grails-spring-security-core/guide/requestMappings.html

    【讨论】:

      猜你喜欢
      • 2013-05-06
      • 2018-10-29
      • 2017-04-29
      • 2020-02-09
      • 2021-09-20
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多