2012-01-27 10 views
51

इन सवालों के बाद:मुझे कौन सी एक्सएचटीएमएल फाइलों को/WEB-INF में डालने की आवश्यकता है और कौन सा नहीं?

कि मैं सभी लिखा JSF2 ढांचे के लिए एक "बेवकूफ" इस मुद्दे को हल करने के लिए , तथ्य यह है कि मैं सीधे /WEB-INF उपफोल्डर में संग्रहीत पृष्ठ पर लिंक नहीं कर सकता। इसके बाद मैंने Google और Stackoverflow पर कुछ शोध किया था, मुझे एक चीज़ पता चलेगा: मैं एक जेएसएफ 2 वेब प्रोजेक्ट कैसे बना सकता हूं?

विशेष रूप से, मैं एक्सएचटीएमएल पृष्ठों को कहां डालूं?

+2

यह एक उत्कृष्ट प्रश्न है जो चेहरे के कई पहलुओं पर छूता है। – Thufir

उत्तर

111

/WEB-INF फ़ोल्डर में फ़ाइलें वास्तव में एंडुसर द्वारा सार्वजनिक रूप से सुलभ नहीं हैं। तो आपके पास http://localhost:8080/contextname/WEB-INF/some.xhtml जैसी कुछ नहीं हो सकती है। यह एक संभावित सुरक्षा छेद होगा क्योंकि एंडुसर /WEB-INF/web.xml और अन्य लोगों के बीच देखने में सक्षम होगा।

आप तथापि, मास्टर टेम्पलेट फ़ाइलों डाल करने के लिए /WEB-INF फ़ोल्डर का उपयोग कर सकते में फ़ाइलों और टैग फ़ाइलों में शामिल हैं उदाहरण के लिए, निम्न टेम्पलेट ग्राहक page.xhtml जो /WEB-INF बाहर रखा जाता है और है http://localhost:8080/contextname/page.xhtml द्वारा पहुँचा जा सकता है:।

<ui:composition template="/WEB-INF/templates/template.xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
> 
    <ui:define name="content"> 
     ... 
     <ui:include src="/WEB-INF/includes/include.xhtml" /> 
     ... 
    </ui:define> 
</ui:composition> 

मास्टर टेम्पलेट्स रखने और /WEB-INF में फ़ाइलों को शामिल करने का लाभ यह है कि एंडयूसर ब्राउज़र एड्रेस बार में अपने यूआरएल को दर्ज/अनुमानित करके सीधे उन्हें खोलने में सक्षम नहीं होगा। सामान्य पृष्ठ और टेम्पलेट क्लाइंट जिन्हें सीधे एक्सेस किया जाना चाहिए /WEB-INF फ़ोल्डर में नहीं रखा जाना चाहिए।

वैसे, समग्र घटक फ़ाइलों को बदले में सार्वजनिक रूप से सुलभ नहीं माना जाता है, हालांकि वे /resources फ़ोल्डर में डिफ़ॉल्ट रूप से एक्सेसिबल द्वारा निर्धारित विनिर्देश के अनुसार हैं। आप सुनिश्चित करें कि आप therefor provided components का उपयोग करके सभी संसाधनों का उपयोग इतना है कि वे URL में /resources द्वारा पहुँचा कभी नहीं किया है (लेकिन /javax.faces.resource द्वारा बजाय) करते हैं, तो आप निम्न बाधा web.xml को /resources फ़ोल्डर में सभी सार्वजनिक उपयोग ब्लॉक करने के लिए जोड़ सकते हैं:

<security-constraint> 
    <display-name>Restrict direct access to the /resources folder.</display-name> 
    <web-resource-collection> 
     <web-resource-name>The /resources folder.</web-resource-name> 
     <url-pattern>/resources/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint /> 
</security-constraint> 
संबंधित मुद्दे