Grails,Cucumber,Geb和Spring Security无法正常协同工作

时间:2015-01-20 04:42:35

标签: grails spring-security geb cucumber-jvm

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

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

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

所以我的问题是,开发模式下的run-app适用于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命令中

1 个答案:

答案 0 :(得分:0)

尝试在spring security中启用debug选项以检查测试正在访问的资源。看起来测试试图访问以下内容: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