Chúng tôi đang làm việc trên một dự án mới với Grails 2.0.1 và Spring Security. Ngữ cảnh tạo người dùng không thành công do springSecurityService trong đối tượng miền người dùng là null. Điều kỳ lạ này chỉ xảy ra trong hộp văn bản Linux của chúng tôi trong khi trên tất cả các hộp cửa sổ dành cho nhà phát triển, nó hoạt động tốt. Bạn không chắc chắn liệu nó có liên quan gì đến môi trường hay không. Trên hộp linux này không thành công.Null springSecurityService làm cho encodePassword thất bại trong Grails 2.0.1
Lớp miền người dùng mà chúng tôi đang sử dụng ở bên dưới (lớp được tạo bởi plugin có một vài trường bổ sung). EncodePassword đang được xử lý bởi các trigger beforeInsert(), beforeUpdate().
Đến chủ đề này nói về các tài liệu tham khảo tạm thời gây ra sự cố trong luồng web mà tôi cho là không được sử dụng tại đây, vì vậy không chắc liệu điều này có liên quan hay không. 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)
}
}
Cảm ơn trước
Tôi không muốn sử dụng encodePassword trong phạm vi của người dùng, nhưng tại chỗ khi người dùng đã được tạo ra: điều khiển, dịch vụ, kiểm tra: new User (username: "root", mật khẩu: springSecurityService.encodePassword ('1')) Tôi không nghĩ rằng đây là cách giải quyết hoặc hack. –
Sau đó, có một số cách để tạo một cá thể Người dùng mới mà không cần mã hóa mật khẩu của nó, vì người gọi không nhất thiết phải sử dụng encodePassword. Quyết định thiết kế này đảm bảo rằng mật khẩu luôn luôn được mã hóa khi miền người dùng được thao tác, từ một quan điểm bảo mật mạnh mẽ hơn. –