我们正在使用Grails 2.0.1和Spring Security开发一个新项目。由于User域对象中的springSecurityService为null,创建用户上下文失败。奇怪的是,这种情况只发生在Linux文本框中,而在所有开发人员窗口框中,它都工作正常。不确定它是否与环境有关,或者是否是其他原因。在Linux框中,这种情况一直失败。
我们使用的用户域类如下所示(插件生成的类,带有几个附加字段)。encodePassword由beforeInsert()和beforeUpdate()触发器处理。
我遇到了这个讨论临时引用导致webflow出现问题的线程,我认为这里没有使用它,所以不确定这是否相关。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)
}
}
先谢了
4条答案
按热度按时间ppcbkaq51#
如果您只想确保User对象被保存,而不关心测试的密码,则可以使用Groovy的元编程来覆盖encodePassword方法。
pwuypxnk2#
springSecurityService
不能是 transient 的。下面的代码应该有效7vux5j2d3#
我知道在测试注入到User域类中的SpringSecurity服务时会遇到一些问题。看看这个问题:如何测试使用SpringSecurity服务的单元测试控制器。
nafvub8i4#
在用户域类中添加以下内容:
:)