2012-03-28 11 views
6

मैंने अपने मुख्य व्यवसाय तर्क हैंडलर से पहले ही मेरे सर्वर पाइपलाइन में ExecutionHandler को दस्तावेज में अनुशंसित किया था।अपाचे शिरो एकीकरण और नेटी एक्जिक्यूशन हैंडलर/ऑर्डर्ड मेमरीएवेयर थ्रेडपूलएक्सएटर

मैं सुरक्षा के लिए अपाचे शिरो http://shiro.apache.org/ का उपयोग कर रहा हूं। यह ठीक काम करता है जब तक कि मैंने ExecutionHandler जोड़ा।

मुद्दा:
Shiro को फांसी संदर्भ वर्तमान धागा है जिसमें आप Subject वस्तु प्राप्त करने के लिए बाध्य है। इसलिए, यदि Subject कार्यकर्ता थ्रेड में प्राप्त किया गया है, लेकिन व्यवसाय तर्क अलग ExecutionHandler प्रबंधित थ्रेड में निष्पादित होता है तो दो निष्पादन संदर्भों को शिरो से संबंधित नहीं किया जाएगा। इस प्रकार ExecutionHandler धागे में शिरो इस बात से अवगत हो जाएंगे कि Subject वास्तव में प्रमाणित है। तो मुझे प्रमाणीकरण त्रुटियां मिल रही हैं।

को Runnable के साथ Executor.execute() पर जाने से पहले को जोड़ना संभव है ताकि सुरक्षा संदर्भ बनाए रखा जा सके। देखें: http://shiro.apache.org/subject.html

आधार पर यह मुझे लगता है कि वर्तमान Shiro SubjectExecutionHandlerRunnable के साथ संबद्ध करने के लिए एक रास्ता खोजने की जरूरत है पर।

मैं अभी भी ExecutionHandler और OrderedMemoryAwareThreadPoolExecutor कार्यान्वयन को पूरी तरह से समझने की कोशिश कर रहा हूं।

मूल रूप से मुझे subject.associateWith(aRunnable) पर कॉल करने की आवश्यकता है aRunnableExecutor.execute(aRunnable) पर पास हो गई है।

क्या किसी के पास विचार है कि मैं शिरो को मिश्रण में कहां लगा सकता हूं?

धन्यवाद, मैट

+2

यह देखना दिलचस्प होगा कि आपने शिरो और नेटटी को कैसे एकीकृत किया। यदि यह ओपनसोर्स है, तो क्या आप लिंक साझा कर सकते हैं? शायद इसे एक जिथब गिस्ट के रूप में पेस्ट करें। – Abe

उत्तर

14

Shiro आप के लिए धागा handoffs स्वचालित कर सकते हैं।

आपको बॉक्स के बाहर SubjectAwareExecutor, SubjectAwareExecutorService, या SubjectAwareScheduledExecutorService कार्यान्वयन का उपयोग करने में सक्षम होना चाहिए। आप वास्तविक निष्पादक सेवा को लपेट सकते हैं जो रननेबल निष्पादित करेगा, और आप अच्छे हैं। उदाहरण के लिए:

ExecutorService myExistingExecutorService = //get from somewhere 
ExecutorService useThis = new SubjectAwareExecutorService(myExistingExecutorService); 

आप इंजेक्षन 'कर सकते हैं या अपने आवेदन में कहीं भी useThis उदाहरण कॉन्फ़िगर और बुला कोड कभी पता करने के लिए Shiro मौजूद है की जरूरत नहीं है।

उदाहरण के लिए, useThis.submit(someRandomRunnable) पर कॉल करने वाले एक अनजान घटक को पता नहीं है कि शिरो उपयोग में है, लेकिन शिरो विषय अभी भी धागे में बनाए रखा जाएगा। अधिक के लिए संबंधित जावाडोक पेज देखें।

एचटीएच!

लेस

+1

मैंने अपने आवेदन संदर्भ में 'SubjectAwareExecutorService' को तार दिया है और अब सबकुछ बहुत अच्छी तरह से काम करता है। इसके लिए बहुत धन्यवाद। यह वही है जो मैं खोज रहा था। चीयर्स, मैट –

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