मैं जर्सी का उपयोग कर अपनी आरईएसटी सेवाओं में कस्टम प्राधिकरण को कार्यान्वित करना चाहता हूं। यह कस्टम प्रमाणीकरण विधियों के साथ-साथ वास्तविक पैरामीटर पर एनोटेशन का निरीक्षण करता है जो विधि प्राप्त करता है।जर्सी संसाधन में वास्तविक पैरामीटर मान प्राप्त करना FilterFactory
मेरे jax-रु एनोटेट विधि लगता है:
@GET
@Path("customers")
@Requires(Role.CustomerManager)
public Customer getCustomer(@ParseFromQueryString @CheckPermission final Customer customer) {
// ...
}
@ParseFromQueryString
एक एनोटेशन कि जर्सी संकेत करता है (एक इंजेक्शन प्रदाता के माध्यम से) एक क्वेरी स्ट्रिंग से एक Customer
unmarshall है।
public class QueryStringCustomerInjectable implements Injectable<Customer> {
public Customer getValue() {
final Customer customer = new Customer();
// ... a UriInfo was injected using the @Context annotation
// ... extract parameters from QueryString and use setters
return customer;
}
}
@CheckPermission
एनोटेशन अपने कस्टम authoriser इंगित करता है कि अनुमतियों एक ग्राहक पर जांच की जानी हैं: जैसे कि के लिए कोड लग रहा है। कुछ उपयोगकर्ताओं के पास कुछ ग्राहकों की जानकारी तक पहुंच है। इसी तरह, @Requires
एनोटेशन एक भूमिका निभाता है जो चालक के पास होना चाहिए। ये जावा की सुरक्षा भूमिकाएं नहीं हैं (स्ट्रिंग्स), बल्कि, वे enum मान हैं।
जर्सी के ResourceDebuggingFilter
का उपयोग शुरुआती बिंदु के रूप में करते हुए, मैं यह जानने के बिंदु पर पहुंचने में सक्षम हूं कि कौन सी विधि लागू की जाएगी। हालांकि, मुझे अभी भी पता नहीं लगाया गया है कि यह निर्धारित करने के लिए कि कौन से पैरामीटर वास्तव में विधि का आह्वान करने के लिए उपयोग किए जाएंगे।
मेरे सिर के शीर्ष पर, मैं दो काम arounds के बारे में सोच सकते हैं:
- एक विधि इंटरसेप्टर Guice + जर्सी का उपयोग कर।
- इस तर्क को
QueryStringCustomerInjectable
पर कोड करें, लेकिन यह थोड़ा सा मैला लगता है। यह बहुत अधिक कर रहा है।
फिर भी, मैं वास्तव में केवल जर्सी/जेएक्स-आरएस का उपयोग करके ऐसा करना चाहता हूं। मुझे लगता है कि मैं बहुत करीब हूँ!
विचार? संकेत दिए गए?
धन्यवाद!
मुझे अभी भी ऐसा करने का एक अच्छा तरीका नहीं मिला है ... तो यह या तो गुइस का उपयोग कर रहा है, या सीएक्सएफ का उपयोग कर रहा है, जो इंटरसेप्टर प्रदान करता है और आपके स्वयं के आवेदकों को प्रदान करने का एक तरीका प्रदान करता है। – chahuistle
क्या आपने एओपी में देखा है या केवल वर्कअराउंड 1 के लिए सर्वलेट फ़िल्टर का उपयोग किया है? – hisdrewness
क्या आपने 'कंटेनररक्वेटफिल्टर' का उपयोग करके और ग्राहक को इंजेक्शन देने का प्रयास किया है? मुझे यकीन नहीं है कि क्या @ बीनपाराम संसाधनों तक सीमित हैं या यदि उन्हें फिल्टर में भी इंजेक्शन दिया जा सकता है, लेकिन मुझे लगता है कि फिल्टर प्रीमैच नहीं है, तो इसे काम करना चाहिए। –