2011-11-14 13 views
7

मैं निम्नलिखित कोड (प्रोग्राम के में एक उपयोगकर्ता लॉग ऑन करने का प्रयास कर रहा है): जब मैं उस चलाने का प्रयासवसंत Authentication.setAuthenticated (बुलियन) java.lang.IllegalArgumentException: करने के लिए इस टोकन सेट नहीं कर सकता पर भरोसा

List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
authorities.add(new GrantedAuthorityImpl("ROLE_ADMIN")); 
... 
User tempUser = new User(correctUsername, 
    correctPassword, 
    true, true, true, true, // logging them in... 
    authorities // type is List<GrantedAuthority> 
); 
... 
Authentication authentication 
    = new UsernamePasswordAuthenticationToken(tempUser, authorities); 
    // I'm using authorities again (List<GrantedAuthority>) 
    // is this the right spot for it? 
... 
// this is the line causing the error 
authentication.setAuthenticated(true); 

java.lang.IllegalArgumentException: Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead 

ध्यान दें कि मैं दोनों User और Authentication वस्तुओं में GrantedAuthority के authorities सूची का उपयोग कर रहा: मैं निम्नलिखित मिलता है। मुझे यकीन नहीं है कि मुझे उन लोगों का उपयोग क्यों करना चाहिए। मैं another SO question के उत्तर को दोहराने की कोशिश कर रहा हूं लेकिन ऊपर पोस्ट अपवाद में भाग रहा हूं। अन्य इसी तरह के सवाल है कि काफी मेरे सवाल का जवाब नहीं दिया:

कुछ होने के बाद सबसे करीब मैं the forum at springsource.org पर था एक जवाब के लिए मिल गया है उसकी खोज करने वाले और उस व्यक्ति के एक का उपयोग कर deprecated method, लेकिन यह एक समान दृष्टिकोण है। मैं प्रोग्राम में प्रोग्राम को कैसे लॉग कर सकता हूं?

+1

कौन सी लाइन समस्या पैदा कर रही है? –

+0

अंतिम एक; इसके ऊपर की टिप्पणी के साथ यह कहता है 'यह लाइन है जो त्रुटि उत्पन्न करती है ('प्रमाणीकरण.सेट प्रमाणीकृत (सत्य);') – Josh

उत्तर

11

आपको स्पष्ट रूप से authentication.setAuthenticated(true) पर कॉल करने की आवश्यकता नहीं है (वास्तव में, आपको अनुमति नहीं है)। निर्माता आपके लिए करता है।

हालांकि, आप गलत कन्स्ट्रक्टर का आह्वान कर रहे हैं। आपको कॉल करना चाहिए:

Authentication authentication 
    = new UsernamePasswordAuthenticationToken(tempUser, password, authorities); 

उपयोगकर्ता नाम पासवर्ड के प्रमाणीकरण टोकन के लिए जावाडोक देखें।

+0

बहुत बढ़िया! बहुत बहुत धन्यवाद। क्या मैं पूछ सकता हूं कि क्यों 'उपयोगकर्ता' और 'उपयोगकर्ता नाम पासवर्ड' प्रमाणीकरण टोकन 'रचनाकारों को दी गई प्राधिकरणों की एक सूची की आवश्यकता है? वैसे भी यह काम करता है इसलिए मैं इसे स्वीकार करूँगा जब मैं – Josh

+1

कर सकता हूं यह यहां टकराए जाने वाले अमूर्तता के दो स्तर हैं। उपयोगकर्ता नाम पासवर्डवर्ड प्रमाणीकरण टोकन एक ऐसी इकाई का ठोस संस्करण है जो प्रमाणित हो सकता है या नहीं (प्रमाणीकरण)। उपयोगकर्ता किसी प्रधानाचार्य (किसी उपयोगकर्ता का विवरण) का कार्यान्वयन किसी भी प्रमाणीकरण स्थिति से स्वतंत्र रूप से मौजूद है। – pap

+0

एक ही मुद्दे में भाग लिया, माना जाता है कि मुझे स्पष्ट रूप से 'setAuthenticated() 'विधि को कॉल करने की आवश्यकता है। –

संबंधित मुद्दे