2011-03-17 11 views
6

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

इसके अलावा, मैं नहीं चाहता कि उपयोगकर्ता सीधे मेरे वेबैप से छवियां प्राप्त कर सकें।

मैं उन अनुरोधों को टॉमकैट से कैसे इनकार कर सकता हूं? मैं अपने सभी मुख्य पृष्ठ पर अग्रेषित करने के सभी अनुरोध चाहता हूं।

उत्तर

4

एक तरह से एक Filter

उदाहरण के लिए

लागू करने के लिए होगा:

package package; 

import javax.servlet.*; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class FilterImplementation implements Filter 
{ 
    public void init(FilterConfig filterConfig) throws ServletException {...} 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
    { 
     // if you detect an illegal request, throw an exception or return without calling chain.doFilter. 
     chain.doFilter(request, response);  
    } 

    public void destroy() {...} 
} 

जोड़ने web.xml के लिए निम्न:

<filter> 
    <filter-name>MyFilter</filter-name> 
    <filter-class>package.FilterImplementation</filter-class> 
</filter> 

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

संपादित

आप जो कुछ भी whi के बारे में जानने की जरूरत है ch पृष्ठ का अनुरोध किया जा रहा है request पैरामीटर में है। पैरामीटर प्रकार ServletRequest लेकिन यह लगभग हमेशा हो जाएगा एक HttpServletRequest तो आप निम्न कर सकते है:

if (request instanceof HttpServletRequest) 
{ 
    HttpServletRequest hrequest = (HttpServletRequest) request; 
    String uri = hrequest.getRequestURI(); // you should be able to just use this 
    String uri = hrequest.getRequestURL(); // otherwise there are more in-depth fields 
} 
+0

कैसे मैं अनुरोध किया गया पृष्ठ मिल सकता है? – shay

3
  1. शामिल JSP फ़ाइलों के बारे में, आप उन्हें WEB-INF फ़ोल्डर के अंतर्गत रखना चाहिए। इस तरह, वे ब्राउज़र से सीधे उपलब्ध नहीं हैं, फिर भी यह आपकी मुख्य जेएसपी फ़ाइल को शामिल करने की अनुमति देता है।

  2. छवियों के साथ एक ही चीज़, लेकिन छवियां थोड़ा मुश्किल, अभी तक करने योग्य हैं। उन्हें WEB-INF फ़ोल्डर के अंतर्गत रखें, और इसके कारण, आप छवियों को <img> टैग से स्थिर रूप से एक्सेस नहीं कर सकते हैं। आपको क्या करने की आवश्यकता होगी एक सर्वलेट कि एक प्रॉक्सी छवि प्राप्त है और इसे बाहर स्ट्रीम करने के लिए रूप में कार्य करता बनाने के लिए अपने <img> कुछ इस तरह दिखता है ... हां, तो: -

====== ====

<img src="/webapp/imageServlet?img=world.jpg"> 

==========

आपका ImageServlet तो WEB-INF फ़ोल्डर से world.jpg फ़ाइल को पढ़ने और छवि बाहर स्ट्रीम होगा।

9

पृष्ठ Prevent access to include files से।

web.xml में जोड़ें:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Include files</web-resource-name> 
     <description>No direct access to include files.</description> 
     <url-pattern>/inc/*</url-pattern> 
     <http-method>POST</http-method> 
     <http-method>GET</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>No direct browser access to include files.</description> 
     <role-name>NobodyHasThisRole</role-name> 
    </auth-constraint> 
</security-constraint> 
संबंधित मुद्दे

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