हम Grails 2.0.1 और वसंत सुरक्षा के साथ एक नई परियोजना पर काम कर रहे हैं। प्रयोक्ता डोमेन ऑब्जेक्ट में springSecurityService के कारण उपयोगकर्ता का संदर्भ शून्य विफल रहता है। आश्चर्यजनक रूप से यह केवल हमारे लिनक्स टेक्स्ट बॉक्स होता है जबकि सभी डेवलपर विंडोज बॉक्स पर यह ठीक काम करता है। सुनिश्चित नहीं है कि पर्यावरण के साथ इसका कोई संबंध नहीं है या फिर यह कुछ और है या नहीं। लिनक्स बॉक्स पर यह लगातार विफल रहता है।शून्य वसंत सुरक्षा सुरक्षा सेवा एन्कोड का कारण बनती है Grails में विफल होने के लिए 2.0.1
हम जिस उपयोगकर्ता डोमेन क्लास का उपयोग कर रहे हैं वह नीचे है (प्लगइन जेनरेट क्लास कुछ अतिरिक्त फ़ील्ड के साथ)। एन्कोड पासवर्ड को पहले() ट्रिगर से पहले, पहले इंसर्ट() द्वारा संभाला जा रहा है।
इस धागे में आया जो क्षणिक संदर्भों के बारे में बात करता है जो वेबफ्लो में समस्याएं पैदा करता है, जो मुझे लगता है कि यहां उपयोग नहीं किया जा रहा है, इसलिए यह सुनिश्चित नहीं है कि यह प्रासंगिक है या नहीं। 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)
}
}
अग्रिम
मैं उपयोगकर्ता डोमेन encodePassword का उपयोग नहीं करना चाहते हैं, लेकिन जगह में जब उपयोगकर्ता बनाया जा रहा है: नियंत्रक, सेवा, परीक्षण: नया उपयोगकर्ता (उपयोगकर्ता नाम: "रूट", पासवर्ड: springSecurityService.encodePassword ('1')) मुझे नहीं लगता कि यह कामकाज या हैक है। –
फिर अपना पासवर्ड एन्कोड किए बिना नया उपयोगकर्ता उदाहरण बनाने का कोई तरीका है, क्योंकि कॉलर को अनिवार्य रूप से एन्कोड पासवर्ड का उपयोग करना नहीं है। यह डिज़ाइन निर्णय यह सुनिश्चित करता है कि जब उपयोगकर्ता डोमेन का उपयोग किया जाता है तो पासवर्ड हमेशा एन्कोड किया जाता है, जो सुरक्षा दृष्टिकोण से अधिक मजबूत होता है। –