जेएसपी - फिल्टर

इस अध्याय में, हम JSP में फिल्टर पर चर्चा करेंगे। सर्वलेट और जेएसपी फिल्टर जावा कक्षाएं हैं जिनका उपयोग निम्नलिखित उद्देश्यों के लिए सर्वलेट और जेएसपी प्रोग्रामिंग में किया जा सकता है -

  • बैक एंड पर संसाधन तक पहुँचने से पहले क्लाइंट से अनुरोधों को रोकना।

  • क्लाइंट से वापस भेजे जाने से पहले सर्वर से प्रतिक्रियाओं में हेरफेर करने के लिए।

विनिर्देशों द्वारा सुझाए गए विभिन्न प्रकार के फ़िल्टर हैं -

  • प्रमाणीकरण फ़िल्टर
  • डेटा संपीड़न फ़िल्टर
  • एन्क्रिप्शन फ़िल्टर
  • फ़िल्टर जो संसाधन पहुंच घटनाओं को ट्रिगर करते हैं
  • छवि रूपांतरण फ़िल्टर
  • लॉगिंग और ऑडिटिंग फिल्टर
  • MIME-TYPE चेन फ़िल्टर
  • टोकन छानना
  • एक्सएसएल / टी फिल्टर जो एक्सएमएल कंटेंट को ट्रांसफॉर्म करते हैं

फ़िल्टर परिनियोजन वर्णक फ़ाइल में परिनियोजित किए जाते हैं web.xmlऔर फिर आपके आवेदन की तैनाती विवरणक में या तो सर्वलेट या जेएसपी नाम या URL पैटर्न पर मैप करें। परिनियोजन डिस्क्रिप्टर फ़ाइल web.xml <Tomcat-installation-directory> \ conf निर्देशिका में मिल सकती है।

जब JSP कंटेनर आपके वेब एप्लिकेशन को शुरू करता है, तो यह प्रत्येक फ़िल्टर का एक उदाहरण बनाता है जिसे आपने परिनियोजन विवरणक में घोषित किया है। फ़िल्टर उस क्रम में निष्पादित होते हैं जो उन्हें परिनियोजन विवरणक में घोषित किया जाता है।

सर्वलेट फ़िल्टर के तरीके

एक फ़िल्टर बस एक जावा वर्ग है जो जावा को लागू करता है javax.servlet.Filterइंटरफेस। Javax.servlet.Filter इंटरफ़ेस तीन विधियों को परिभाषित करता है -

क्र.सं. विधि और विवरण
1

public void doFilter (ServletRequest, ServletResponse, FilterChain)

इस विधि को कंटेनर द्वारा हर बार एक रिक्वेस्ट / रिस्पॉन्स पेयर को चेन के माध्यम से एक रिसोर्स के लिए क्लाइंट रिक्वेस्ट के कारण चेन से गुजारा जाता है।

2

public void init(FilterConfig filterConfig)

इस विधि को वेब कंटेनर द्वारा एक फिल्टर को इंगित करने के लिए कहा जाता है जिसे इसे सेवा में रखा जा रहा है।

3

public void destroy()

इस विधि को वेब कंटेनर द्वारा एक फिल्टर को इंगित करने के लिए कहा जाता है जो इसे सेवा से बाहर ले जा रहा है।

JSP फ़िल्टर उदाहरण

निम्नलिखित उदाहरण से पता चलता है कि क्लाइंट के आईपी पते और वर्तमान तिथि समय को कैसे प्रिंट किया जाए, हर बार यह किसी भी जेएसपी फ़ाइल तक पहुंच जाएगा। यह उदाहरण आपको JSP फ़िल्टर की एक बुनियादी समझ देगा, लेकिन आप एक ही अवधारणा का उपयोग करके अधिक परिष्कृत फ़िल्टर अनुप्रयोग लिख सकते हैं -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Implements Filter class
public class LogFilter implements Filter  {
   public void  init(FilterConfig config) throws ServletException {
      // Get init parameter 
      String testParam = config.getInitParameter("test-param"); 
 
      //Print the init parameter 
      System.out.println("Test Param: " + testParam); 
   }
   public void  doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
      throws java.io.IOException, ServletException {
      
      // Get the IP address of client machine.   
      String ipAddress = request.getRemoteAddr();
      
      // Log the IP address and current timestamp.
      System.out.println("IP "+ ipAddress + ", Time "+ new Date().toString());
      
      // Pass request back down the filter chain
      chain.doFilter(request,response);
   }
   public void destroy( ) {
      /* Called before the Filter instance is removed 
      from service by the web container*/
   }
}

संकलन LogFilter.java हमेशा की तरह और अपने डाल दिया LogFilter.class में फाइल <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes

JSP फ़िल्टर मैपिंग Web.xml में

फ़िल्टर को परिभाषित किया जाता है और फिर URL या JSP फ़ाइल नाम के लिए मैप किया जाता है, उसी तरह जैसे कि Servlet परिभाषित किया गया है और फिर URL पैटर्न में मैप किया गया है web.xmlफ़ाइल। परिनियोजन डिस्क्रिप्टर फ़ाइल में फ़िल्टर टैग के लिए निम्न प्रविष्टि बनाएँweb.xml

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   
   <init-param>
      <param-name>test-param</param-name>
      <param-value>Initialization Paramter</param-value>
   </init-param>
</filter>

<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

उपरोक्त फ़िल्टर सभी सर्वलेट्स और JSP पर लागू होगा क्योंकि हमने निर्दिष्ट किया था /*हमारे विन्यास में। यदि आप केवल कुछ सर्वलेट्स या JSP पर फ़िल्टर लगाना चाहते हैं तो आप एक विशेष सर्वलेट या JSP पथ निर्दिष्ट कर सकते हैं।

अब किसी भी सर्वलेट या JSP पर कॉल करने का प्रयास करें और आपको वेब सर्वर लॉग में जनरेट लॉग दिखाई देगा। आप उपयोग कर सकते हैंLog4J logger लॉग इन करने के लिए एक अलग फाइल में लॉग इन करें।

एकाधिक फ़िल्टर का उपयोग करना

आपका वेब एप्लिकेशन एक विशिष्ट उद्देश्य के साथ कई अलग-अलग फ़िल्टर परिभाषित कर सकता है। गौर कीजिए, आप दो फिल्टर ऑटेनफिल्टर और लॉगफिल्टर को परिभाषित करते हैं । बाकी की प्रक्रिया ऊपर बताई गई है, इसके अलावा आपको नीचे बताए अनुसार एक अलग मैपिंग बनाने की आवश्यकता है -

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   
   <init-param>
      <param-name>test-param</param-name>
      <param-value>Initialization Paramter</param-value>
   </init-param>
</filter>
 
<filter>
   <filter-name>AuthenFilter</filter-name>
   <filter-class>AuthenFilter</filter-class>
   <init-param>
      <param-name>test-param</param-name>
      <param-value>Initialization Paramter</param-value>
   </init-param>
</filter>
 
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
 
<filter-mapping>
   <filter-name>AuthenFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

फिल्टर एप्लीकेशन ऑर्डर

Web.xml में फ़िल्टर-मैपिंग तत्वों का क्रम उस क्रम को निर्धारित करता है जिसमें वेब कंटेनर फ़िल्टर को सर्वलेट या JSP पर लागू करता है। फ़िल्टर के क्रम को उलटने के लिए, आपको बस फ़िल्टर-मैपिंग तत्वों को रिवर्स करने की आवश्यकता हैweb.xml फ़ाइल।

उदाहरण के लिए, उपरोक्त उदाहरण पहले LogFilter लागू करेगा और फिर यह किसी भी सर्वलेट या JSP के लिए AuthenFilter लागू करेगा; निम्नलिखित उदाहरण आदेश को उलट देगा -

<filter-mapping>
   <filter-name>AuthenFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
 
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>