2011-04-27 12 views
6

से एक्सेस (सत्र) प्रबंधक का उपयोग कैसे करें मुझे कस्टम सत्र आईडी द्वारा कस्टम सत्र लोड करने के लिए टोमकैट में सर्वलेट (या फ़िल्टर) से प्रबंधक तक पहुंचने की आवश्यकता है।टॉमकैट: सर्वलेट

आपके अगले प्रश्न का उत्तर दें: मुझे इसकी आवश्यकता क्यों है। फ्लैश में एक पुरानी बग है जो इसे आईई से कुकीज़ भेजने का कारण बनती है और वर्तमान ब्राउज़र से नहीं। इसलिए, अगर मैं एफएफ में हूं और मैं SWFUpload के साथ फ़ाइल अपलोड करने का प्रयास कर रहा हूं, तो मैं गलत सत्र और त्रुटि के साथ समाप्त होता हूं।

मैं POST पर जादू पैरामीटर जोड़ना चाहता हूं जो डिफ़ॉल्ट (गलत) सत्र आईडी को ओवरराइड करना चाहिए, फिर टॉमकैट द्वारा लोड किए गए कस्टम सत्र को लोड करना चाहिए। मैं यूआरएल रीराइटिंग का उपयोग नहीं कर सकता क्योंकि कुकीज़ पहले हल हो जाती हैं, और जब फ्लैश आईई से गलत कुकी भेजता है, तो टॉमकैट यूआरएल-रीरी लिखित पते से सत्र लोड करने का प्रयास नहीं करता है।

मैं किसी अन्य संकेत की सराहना करता हूं कि प्रबंधक से संदर्भ या मूल समस्या का समाधान कैसे प्राप्त करें।

अग्रिम धन्यवाद, Juriy

उत्तर

4

यह ServletContext के कार्यान्वयन के माध्यम से सुलभ होना चाहिए। इसे जांचने के लिए टोमकैट के स्रोत प्राप्त करें, या संदर्भ के सभी क्षेत्रों को प्राप्त करने के लिए प्रतिबिंब का उपयोग करें। प्रबंधक को पाने के लिए आपको बहुत सारे प्रतिबिंब का उपयोग करना पड़ सकता है।

(मैं नहीं पा सके प्रबंधक JNDI में सामने आ रहा है कि क्या है, लेकिन आप वहाँ के रूप में अच्छी देख सकते हैं)

5
बिलाव के लिए

:

ApplicationContextFacade appContextFacadeObj = (ApplicationContextFacade) request.getSession().getServletContext(); 

    try 
    { 
     Field applicationContextField = appContextFacadeObj.getClass().getDeclaredField("context"); 
     applicationContextField.setAccessible(true); 
     ApplicationContext appContextObj = (ApplicationContext) applicationContextField.get(appContextFacadeObj); 
     Field standardContextField = appContextObj.getClass().getDeclaredField("context"); 
     standardContextField.setAccessible(true); 
     StandardContext standardContextObj = (StandardContext) standardContextField.get(appContextObj); 
     Manager persistenceManager = standardContextObj.getManager(); 
    } 
    catch(SecurityException e) 
    { 
     logger.error(e); 
    } 
    catch(NoSuchFieldException e) 
    { 
     logger.error(e); 
    } 
    catch(IllegalArgumentException e) 
    { 
     logger.error(e); 
    } 
    catch(IllegalAccessException e) 
    { 
     logger.error(e); 
    } 
6

रूप इहोर के कोड का विरोध किया, इस कोड को HttpSession से Manager हो रही द्वारा थोड़ा कम अमूर्त का उपयोग करता है:

private Manager manager(HttpSession session) throws Exception { 

    Field facadeSessionField = StandardSessionFacade.class.getDeclaredField("session"); 
    facadeSessionField.setAccessible(true); 
    StandardSession stdSession = (StandardSession) facadeSessionField.get(session); 

    return stdSession.getManager(); 
} 
+0

यह वास्तव में मेरे बेकन बचाया है, धन्यवाद! – RTF

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