- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用带有功能性Spock 0.7的Spring Security Core 2.0-RC4,Spring Security REST 1.5.0.M1的Grails 2.4.4。
我正在使用功能测试来测试要构建的REST API的 Controller 。设置测试时,我先创建一个User
,一个管理员Role
,然后创建一个UserRole
。当我检查User
是否已使用spock功能测试的相应凭据持久保存时,我发现一切正常。
但是,在进行身份验证时,调用GormUserDetailsService
时User.findWhere(username:<appropriate username>)
不会产生任何结果。具体的方法来自GormUserDetailsService
在这里:
UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException {
def conf = SpringSecurityUtils.securityConfig
String userClassName = conf.userLookup.userDomainClassName
def dc = grailsApplication.getDomainClass(userClassName)
if (!dc) {
throw new IllegalArgumentException("The specified user domain class '$userClassName' is not a domain class")
}
Class<?> User = dc.clazz
User.withTransaction { status ->
def user = User.findWhere((conf.userLookup.usernamePropertyName): username)
if (!user) {
log.warn "User not found: $username"
throw new NoStackUsernameNotFoundException()
}
Collection<GrantedAuthority> authorities = loadAuthorities(user, username, loadRoles)
createUserDetails user, authorities
}
}
User.findWhere()
调用什么都找不到,甚至认为我在功能测试中已经确认已将User实例刷新到数据库中。我已经尝试使用此方法的
UserRole
块内的
User
调用printin所有的
findAll()
和
withTransaction
,但它们仍然不返回任何内容。
@TestFor
和
@Mock
批注。
package com.help
import grails.plugins.rest.client.RestBuilder
import grails.plugins.rest.client.RestResponse
import grails.test.mixin.Mock
import grails.test.mixin.TestFor
import groovy.json.JsonBuilder
import org.codehaus.groovy.grails.web.json.JSONObject
import spock.lang.Shared
import spock.lang.Specification
@TestFor(PersonController)
@Mock([Person, Role, PersonRole])
class PersonControllerSpec extends Specification {
@Shared
RestBuilder rest = new RestBuilder(connectTimeout:10000, readTimeout:20000)
@Shared
String baseUrl = "http://localhost:8080"
@Shared
int iterationCount = 0
Collection<Person> persons = []
def setup() {
Role adminRole = Role.findByAuthority("ROLE_ADMIN") ?: new Role(authority:"ROLE_ADMIN").save(failOnError:true, flush:true)
Role userRole = Role.findByAuthority("ROLE_USER") ?: new Role(authority:"ROLE_USER").save(failOnError:true, flush:true)
Person admin = new Person(name:"reserved", keyword:"admin", password:"password", email:"email@email.com", phone:"2222222222", personalPhoneNumber:"1112223333").save(failOnError:true, flush:true)
Person user = new Person(name:"reserved", keyword:"user", password:"password", email:"email@email.com", phone:"2222222222", personalPhoneNumber:"1112223333").save(failOnError:true, flush:true)
PersonRole.create(admin, adminRole, true)
PersonRole.create(user, userRole, true)
for (i in 0..20) {
persons << new Person(name:"person-$iterationCount-$i", password:"password", keyword:"p-$iterationCount-$i", email:"email@email.com", phone:"1112223333", personalPhoneNumber:"1112223333")
}
persons*.save(failOnError:true, flush:true)
}
def cleanup() { iterationCount++ }
void "test listing persons"() {
when: "we have an authenticated request"
JsonBuilder jsonBuilder = new JsonBuilder()
JSONObject json = jsonBuilder keyword:"admin", password: "password"
RestResponse authResponse = rest.post("$baseUrl/api/login") {
contentType "application/json"
body(json)
}
then: "can access both restricted and public resources"
...
}
}
Config.groovy
中的spring安全设置:
grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.help.Person'
grails.plugin.springsecurity.userLookup.usernamePropertyName = 'keyword'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.help.PersonRole'
grails.plugin.springsecurity.authority.className = 'com.help.Role'
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
'/': ['permitAll'],
'/index': ['permitAll'],
'/index.gsp': ['permitAll'],
'/assets/**': ['permitAll'],
'/**/js/**': ['permitAll'],
'/**/css/**': ['permitAll'],
'/**/images/**': ['permitAll'],
'/**/favicon.ico': ['permitAll'],
'/dbconsole/**': ['ROLE_USER', 'ROLE_ADMIN']
]
grails.plugin.springsecurity.filterChain.chainMap = [
'/v1/public/**': 'anonymousAuthenticationFilter,restTokenValidationFilter,restExceptionTranslationFilter,filterInvocationInterceptor',
'/v1/**': 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter', // v1 rest api stateless
'/api/**': 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter', // api utility methods stateless
'/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'
]
grails {
plugin {
springsecurity {
rest {
login.useJsonCredentials = true
login.usernamePropertyName = "keyword"
token {
rendering.usernamePropertyName = "keyword"
rendering.authoritiesPropertyName = "roles"
rendering.tokenPropertyName = "access_token"
validation.useBearerToken = true
validation.enableAnonymousAccess = true
}
}
}
}
}
最佳答案
事实证明,域类未出现在服务器实例上的问题与以下事实有关:功能测试中的服务器实例在单独的jvm上运行(派生的jvm模式),因此所有调用都必须通过远程。
我最终使用了BuildConfig.groovy
中所示的远程控制插件,如下所示(记得我在Grails 2.4.4上):
plugins {
...
compile ":rest-client-builder:2.0.4-SNAPSHOT"
compile ":remote-control:1.5"
...
}
关于grails - Grails SpringSecurity Spock功能测试UserDetailsService:在以下位置找不到用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567742/
我目前正在用 Python 编写 Java 反编译器,并希望添加一些自动化功能测试。我有一堆简短的 Java 代码,需要确保它们反编译没有错误,输出代码编译,并且生成的程序给出预期的输出。 我计划使用
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
如何对 .net mvc Controller /操作进行功能测试。 我刚刚经历了多年的 Rails 开发,开始从事 .net mvc 的工作。这很痛苦,但我希望这很大程度上只是学习曲线。 对我而言,
我设置了 grunt 任务,以便在我的本地机器上使用 CasperJS 进行一些功能测试。一切正常。 我想知道是否有办法一直运行测试直到失败?或者通过一定次数的测试? 最佳答案 在 powershel
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5个月前关闭。 Improve this q
我在 Wiki 和其他几个地方阅读有关功能测试的内容,但我没有明白一件事 - 为什么它被视为纯粹的黑盒测试?当我测试功能时,我经常依赖于实现方面的知识,或者至少依赖于诸如边界值(或数据库中的数据类型等
我想为 java servlet 编写一些功能测试,并且我想确保它适用于所有可能干扰 servlet 的过滤器和其他随机 java web 内容。在 Java 中有没有好的方法来做到这一点? 我注意到
我希望有人能阐明我面临的这个问题。 [问题] 我在功能单元测试中模拟了 doctrine.orm.default_entity_manager 服务。我将其注入(inject)到客户端服务容器中,这样
我们有一个 Mule 应用程序,它有 6 个或 7 个流,每个流大约有 5 个组件。 这是设置。 我们将 JMS 请求发送到 ActiveMQ 队列。骡听着。根据消息的内容,我们将其转发到相应的流。
我发现 Symfony2 中的功能测试总是尝试将页面请求为“http://localhost” 我的环境是用虚拟主机设置的,所以我的应用程序位于“http://symfony.dev” 经过一些测试,
我有一个 Controller ,我想为其创建功能测试。该 Controller 通过 MyApiClient 向外部 API 发出 HTTP 请求。类(class)。我需要模拟这个 MyApiCli
如题。 ruby test / functionals / whatevertest.rb不起作用,这需要我将所有require 'test_helper'替换为require File.dirnam
我正在使用Grails的功能测试插件为我的RESTful API项目准备功能测试用例。 我无法使用适用于我的其他情况的技术上传文件。 class CreateFunctionalSpec{ final
我有一个用 Python 3 编写的 API 包装类 WfcAPI,我想使用 PyUnit 对其进行测试. WfcAPI 的 setUpClass() 涉及登录到外部 API 服务器。当前功能测试实现
如果操作返回 json 对象,我如何在 Symfony 功能测试中测试响应? 我有密码 with('response')->begin()-> isHeader('content-type','a
我刚开始使用 AngularJS 进行测试。请帮我解决它。我的剧本 angular.module('test', []) .controller('ctrl', ['$scope', 'svc', f
你好, 我一直在思考描述特征的实质(Gherkin语法),找不到最佳答案。 同一场景的两个例子: Scenario: Creation of a new task Given I see the bu
我正在 Julia 中处理一组函数,我必须开发一组覆盖测试。我有一个函数在一个元组中返回 3 个值。 我怎样才能做这样的测试: @test_approx_eq_eps() 这将适用于所有三个输出值,它
我应该为所有嵌套方法编写单元测试,还是为调用者编写一个测试就足够了? 例如: void Main() { var x = new A().AFoo(); } public class A {
最近在研究django测试。因为我需要在我的网站上构建单元测试和集成测试。但是我发现 django 中集成测试的教程真的很少,而且经常在我点击名为“集成测试”的链接时出现,我只看到标题“功能测试”。那
我是一名优秀的程序员,十分优秀!