gpt4 book ai didi

grails - Null springSecurityService 导致 encodePassword 在 Grails 2.0.1 中失败

转载 作者:行者123 更新时间:2023-12-04 01:35:24 25 4
gpt4 key购买 nike

我们正在使用 Grails 2.0.1 和 Spring Security 开发一个新项目。由于 User 域对象中的 springSecurityService 为空,创建用户上下文失败。奇怪的是,这仅发生在我们的 Linux 文本框上,而在所有开发人员窗口框上它都可以正常工作。不知道是不是跟环境有关系,还是别的什么。在 linux 机器上,这始终失败。

我们使用的用户域类如下(插件生成的类,带有几个附加字段)。 encodePassword 由 beforeInsert()、beforeUpdate() 触发器处理。

遇到这个线程,它讨论了导致 webflows 问题的 transient 引用,我认为这里没有使用它,所以不确定这是否相关。
http://grails.1312388.n4.nabble.com/Spring-Security-Plugin-1-of-the-time-springSecurityService-null-td4349941.html

class User {

transient springSecurityService

static constraints = {
firstName blank: false, nullable: false, size: 2..100
lastName blank: false, nullable: false, size: 2..100
username blank: false, nullable: false, unique : true, email: true
password blank: false, nullable: false, size: 6..255
}

static mapping = {
password column: '`password`'
}

String username
String password
boolean enabled
boolean accountExpired
boolean accountLocked
boolean passwordExpired

/* user details */
String firstName;
String lastName;

Set<Role> getAuthorities() {
UserRole.findAllByUser(this).collect { it.role } as Set
}

def beforeInsert() {
encodePassword()
}

def beforeUpdate() {
if (isDirty('password')) {
encodePassword()
}
}

protected void encodePassword() {
password = springSecurityService.encodePassword(password)
}
}

提前致谢

最佳答案

如果您只想确保保存 User 对象并且不关心测试的密码,则可以使用 Groovy 的元编程来覆盖 encodePassword 方法。

@TestFor(UserService)    
@Mock(User)
class UserServiceTest {
void testMethod() {
User.metaClass.encodePassword = { -> }

service.invokeTestThatSavesUserDomainClass()
}
}

关于grails - Null springSecurityService 导致 encodePassword 在 Grails 2.0.1 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com