2010-01-27 18 views
7

का उपयोग कर नियंत्रक विरासत मैं अपने स्प्रिंग ऐप में बेस नियंत्रक बनाने में सक्षम होना चाहता हूं, अन्य बातों के साथ, यह निर्धारित करता है कि कोई उपयोगकर्ता पंजीकृत उपयोगकर्ता है या नहीं। टेम्पलेट डिज़ाइन पैटर्न के बाद, यह बेस नियंत्रक, एक सार संरक्षित विधि होगा जिसमें नियंत्रक उप-वर्ग लागू होंगे।वसंत: @ नियंत्रक एनोटेशन

अमूर्त विधि इसे उपयोगकर्ता, पंजीकृत या अन्यथा का एक उदाहरण पास कर देगी। हालांकि, मुझे नहीं पता कि मैं ऐसा कैसे करूंगा क्योंकि ऐसा लगता है कि कंट्रोलर का उपयोग करके @ कंट्रोलर एनोटेशन का उपयोग करके प्रत्येक नियंत्रक अपने अनुरोध हैंडलिंग विधि को परिभाषित करने के लिए स्वतंत्र है, हालांकि उन्हें पसंद है।

कुछ प्रकार की उपयोगकर्ता सेवा कक्षा तैयार करेगी जो प्रत्येक नियंत्रक में इंजेक्शन दी जाती है और उपयोगकर्ता को मान्य करने के लिए उपयोग की जाती है, इस के आसपास जाने का एक तरीका है? यह सवाल पूछता है (कम से कम मेरे लिए) इस तरह के नियंत्रक को HttpServletRequest या सत्र ऑब्जेक्ट का पकड़ कैसे मिलता है?

धन्यवाद।

उत्तर

1

मुझे लगता है कि बेस कंट्रोलर एक अच्छा विचार नहीं है यदि इसका एकमात्र कोड उपयोगकर्ता प्रमाणीकरण के लिए है ... इसके बजाय स्प्रिंग सुरक्षा का उपयोग करें। यह सबसे अच्छा विकल्प है।

वैकल्पिक रूप से, अगर आप इस तरह के तरीकों हो सकता है ... वसंत संदर्भ पर एक नज़र डालें ..

@Controller("loginController") 
public class LoginController {  

    @RequestMapping(value="/login.do", method=RequestMethod.POST) 
    public String login(Model model, HttpServletRequest request) { 

     String userIdFromRequest = (String)request.getParameter("userId"); 
     String password = (String)request.getParameter("password"); 

     boolean verified = ...send userIdFromRequest and password to the user service for 
     verification... 

     if (verified){ 
     request.getSession().setAttribute("userId", userIdFromRequest); 
     } 

    }   

    //More Methods 

} 

यह मदद की थी?

-SB

+0

धन्यवाद एसबी, मैंने इसे माना है लेकिन अभी इस पर कुछ राय एकत्रित कर रहा हूं। मैं स्प्रिंग सिक्योरिटी पर गंभीरता से विचार कर रहा हूं लेकिन हर जगह कोड डुप्लिकेशन से बचना चाहता हूं - मुझे वसंत सुरक्षा पर पढ़ने की जरूरत है। – richever

13
  1. एक abstract BaseController परिभाषित करें, कोई एनोटेशन
  2. परिभाषित ठोस और सार तरीकों
  3. कॉल उपवर्गों से इन तरीकों (जो @Controller से एनोटेट) जब भी जरूरत के साथ।
+0

धन्यवाद बोझो, यह वही है जो मैं सोच रहा था। मैं प्रतिक्रिया की सराहना करता हूं। – richever

+2

लेकिन क्या होगा यदि बेसकंट्रोलर में कुछ ठोस तरीकों को कुछ स्वायत्त सेवाओं तक पहुंचने की आवश्यकता है? मैं एक बेसकंट्रोलर की कल्पना करता हूं जिसमें एक आम '@Autowired निजी उपयोगकर्ता सेवा उपयोगकर्ता सेवा' है। क्या इसका मतलब यह है कि 'अमूर्त बेसकंट्रोलर' को ऑटोवॉयरिंग काम करने के लिए 'नियंत्रक' के साथ भी एनोटेट किया जाना चाहिए? – bertie

0

मूल समस्या यह है कि एनोटेशनल बूटस्ट्रैपिंग पॉलिमॉर्फिक नहीं है। मैंने यह पेपर उपयोगी पाया: http://sanguinecomputing.com/design-pattern-for-hierarchical-controller-organization-with-annotational-configuration-spring-mvc-3/

+0

यदि आप यहां पेपर को सारांशित कर सकते हैं तो यह उपयोगी होगा। – ChrisF

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