2010-10-08 6 views
8

के साथ संदेश शीर्षलेख में पैरामीटर पास करना मैं एक आरईएसटी एपीआई विकसित कर रहा हूं और मुझे आवेदक प्रक्रिया में प्रत्येक अनुरोध के लिए संदेश प्रमाणित करने के लिए क्रिप्टोग्राम को ट्रांस्पोर्ट करने की आवश्यकता है (गुप्त कुंजी से मैक एन्क्रिप्शन)। संदेश संदेश में गैर-डेटा जानकारी जोड़ने से बचने के लिए मैं उन्हें संदेश शीर्षलेख में डालने के बारे में सोच रहा था जिसमें पोस्ट/पुनर्प्राप्त ऑब्जेक्ट (एक्सएमएल या जेएसओएन) शामिल है।एक आरईएसटी एपीआई

क्या यह सबसे अच्छा अभ्यास है?

क्या मैं शीर्षलेख में जितना चाहूं उतना पैरामीटर जोड़ सकता हूं? मैंने पढ़ा है कि मुझे उन्हें "x-" के साथ उपसर्ग करना होगा। इस पैरामीटर का व्यवहार पथ या क्वेरी पैराम्स से बिल्कुल समान है?

मैं जर्सी का उपयोग कर रहा हूं।

आपकी मदद के लिए धन्यवाद।

+0

Additonnal प्रश्न: है यह बेहतर मौजूदा शीर्ष लेख मानकों (दिनांक, प्राधिकरण) का उपयोग करने या फिर खास (एक्स एप्लिकेशन की तारीख बनाने के लिए, एक्स एप्लिकेशन लेखन मेरे कोड इस (सरलीकृत संस्करण) के समान देखा)? – Zofren

उत्तर

8
  1. हाँ मुझे विश्वास है कि कुछ डेटा स्थानांतरित करने के लिए हेडर पैरामीटर होना स्वीकार्य है। जेएक्स-आरएस मानक भी @HeaderParam annotation को परिभाषित करता है। सरल example of @HeaderParam

  2. यह गैर-मानक http शीर्षलेख "x-" के साथ उपसर्ग करने का एक सम्मेलन है।

मेरे पास आपकी समान स्थिति थी: मुझे प्रत्येक आरईएसटी कॉल के साथ उपयोगकर्ता टोकन और एप्लिकेशन आईडी स्थानांतरित करने की आवश्यकता थी। कोड डुप्लिकेशंस से बचने के लिए मैंने PreProcessInterceptor लागू किया (मैं रीस्टेसी का उपयोग कर रहा हूं), जिसके माध्यम से सभी आरईएसटी अनुरोधों को रूट किया जाता है। यदि उपयोगकर्ता टोकन मान्य नहीं है और यदि उपयोगकर्ता को दिए गए एप्लिकेशन आईडी के लिए विशेषाधिकार नहीं हैं, तो मैं 401 अनधिकृत लौटाता हूं।

@Provider 
@ServerInterceptor 
public class RestSecurityInterceptor implements PreProcessInterceptor { 

    @Override 
    public ServerResponse preProcess(HttpRequest request, ResourceMethod method) 
      throws UnauthorizedException { 

     String token = request.getHttpHeaders().getRequestHeader("token").get(0); 

     // user not logged-in? 
     if (checkLoggedIn(token)) { 
      ServerResponse response = new ServerResponse(); 
      response.setStatus(HttpResponseCodes.SC_UNAUTHORIZED); 
      MultivaluedMap<String, Object> headers = new Headers<Object>(); 
      headers.add("Content-Type", "text/plain"); 
      response.setMetadata(headers); 
      response.setEntity("Error 401 Unauthorized: " 
       + request.getPreprocessedPath()); 
      return response; 
     } 
     return null; 
    } 
} 
+0

धन्यवाद। इंटरसेप्टर समाधान सुरुचिपूर्ण है लेकिन मेरे प्रमाणीकरण प्रक्रिया को मेरे सभी एप्लिकेशन में सामान्यीकृत नहीं किया गया है। – Zofren