2012-07-18 25 views
8

में HTTP शीर्षलेख के आधार पर इंटरसेप्टिंग मैं दो प्रकार के साथ आरईएसटी सेवाओं का विकास कर रहा हूं।रीस्टेसी

  • लॉगिन से पहले कोई सत्र टोकन HTTP शीर्षलेख पर नहीं भेजा जाएगा। प्रत्येक अनुरोध में लॉग इन सत्र टोकन के बाद
  • पारित किया जाएगा।

मैं प्रत्येक आरईएसटी विधि में @ हेडरपाराम शामिल नहीं करना चाहता हूं। मैं इसे पहले अवरुद्ध करना चाहता हूं और उस पर आधारित मैं सत्र की वैधता की जांच करना चाहता हूं। कृपया मुझे पता

  1. कैसे मैं RESTEasy
  2. में हेडर के आधार पर को रोक सकता कुछ तरीके

धन्यवाद में अवरोध उत्पन्न कर से बचने के लिए कैसे करते हैं।

उत्तर

7

मैं इस समस्या PreProcessInterceptor

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface Securable { 
    String header() default "session-token"; 
} 

@Provider 
@ServerInterceptor 
public class ValidationInterceptor implements PreProcessInterceptor, AcceptedByMethod { 

    @Context 
    private HttpServletRequest servletRequest; 

    @Override 
    public boolean accept(Class clazz, Method method) { 
    return method.isAnnotationPresent(Securable.class); 
    } 

    @Override 
    public ServerResponse preProcess(HttpRequest httpRequest, ResourceMethod resourceMethod) throws Failure, 
     WebApplicationException { 

    Securable securable = resourceMethod.getMethod().getAnnotation(Securable.class); 
    String headerValue = servletRequest.getHeader(securable.header()); 

    if (headerValue == null){ 
     return (ServerResponse)Response.status(Status.BAD_REQUEST).entity("Invalid Session").build(); 
    }else{ 
     // Validatation logic goes here 
    } 

    return null; 
    } 
} 

का उपयोग कर एनोटेशन @Securable बाकी सेवा है जो मान्य किए जाने की आवश्यकता पर उपयोग किया जाएगा हल किया।

@Securable 
@PUT 
public Response updateUser(User user) 
+0

यदि आप जर्सी का उपयोग कर रहे हैं तो एनोटेशन 'एक्स' बनाएं और एनोट बाइंडिंग का उल्लेख एनोटेशन में करें। ContainerRequestFilter बनाएं और इस फ़िल्टर में एनोटेशन 'एक्स' जोड़ें। अब 'एक्स' एनोटेशन के साथ अपनी सेवाओं को सजाने के लिए – jaks

3

दो दृष्टिकोण

  1. उपयोग JAX-RS interceptors रहे हैं - आप, इंटरसेप्टर में अनुरोध वस्तु की पहुंच है तो आप हेडर

  2. उपयोग अच्छे पुराने JavaServlet फिल्टर पढ़ सकते हैं - यह एक समस्या नहीं है कि आप जेएक्स-आरएस का उपयोग कर रहे हैं, आप आरईएसटी अनुरोधों को भी फ़िल्टर कर सकते हैं। इंटरसेप्टर के लिए इसी प्रकार, फिल्टर आप देख सकते हैं कि HttpSession मौजूद है (request.getSession() विधि) है और यह विशेषता आवश्यक है अनुरोध वस्तु है, जो जानकारी

शीर्ष लेख दोनों ही मामलों में की पहुंच है।

आप जावा कोड में कॉन्फ़िगरेशन या प्रोग्रामेटिक रूप से फ़िल्टर किए गए अनुरोधों को शामिल/बहिष्कृत कर सकते हैं, अनुरोध पथ को देख रहे हैं।