我有一个使用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
命令中
答案 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