हाँ, अगर आप सीधे पृष्ठों तक पहुंच को अवरुद्ध करना चाहते हैं, तो शायद कस्टम सुरक्षा पैकेज की तरह कुछ उपयोग किए बिना जाने का सबसे अच्छा तरीका है - अन्यथा, यदि आप केवल यह सुनिश्चित करना चाहते हैं कि पृष्ठ सही तरीके से प्रस्तुत किए जाएं। आप वास्तव में अपने चेहरे सर्वलेट मैपिंग को .xhtml में बदल सकते हैं, जिसका अर्थ है कि जब लोग पृष्ठों तक पहुंचते हैं तो आपका स्रोत प्रकट नहीं होगा।
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
आप क्रम में और अधिक जटिल पुनर्लेखन नियम क्या करने के लिए वास्तव में पृष्ठों को लॉक चाहते हैं, आप एक कस्टम पुनर्लेखन प्रोसेसर का उपयोग पर विचार करने और प्रोसेसर इंटरफ़ेस को लागू कर सकते हैं।
http://ocpsoft.com/docs/prettyfaces/3.3.0/en-US/html_single/#inbound_rewriting.options
कस्टम प्रोसेसर की पहुंच है HttpServletRequest और HttpServletResponse और इनबाउंड और आउटबाउंड पुनर्लेखन पर दोनों आह्वान: आप इस इंटरफेस के साथ और अधिक जटिल कर सकते हैं:
/**
* Perform a rewrite operation on a given URL, utilizing any necessary information from the given {@link RewriteRule}
* configuration object from which the processor was invoked.
*
* @author Lincoln Baxter, III <[email protected]>
*/
public interface Processor
{
/**
* Process an inbound URL Rewrite request. This takes place when the request first comes in to the server and passes
* through {@link RewriteFilter}
*/
String processInbound(HttpServletRequest request, HttpServletResponse response, RewriteRule rule, String url);
/**
* Process an outbound URL Rewrite request. This takes place when a URL is passed in to
* {@link HttpServletResponse#encodeRedirectURL(String)}, and since most frameworks ensure the call to
* 'encodeRedirectUrl()' occurs automatically, can be assumed to occur whenever a URL would be rendered to HTML
* output.
*/
String processOutbound(HttpServletRequest request, HttpServletResponse response, RewriteRule rule, String url);
}
अन्यथा, तुम क्या कर रहे काम करेंगे, और OCPSoft तक पुनर्लेखन https://github.com/ocpsoft/rewrite (कौन PrettyFaces के पीछे भी कर रहे हैं) जारी की है, ऐसी स्थिति में आप एक साधारण भीतर का पुनर्लेखन नियम के साथ बहुत आसानी से कर सकता है:
package com.example;
public class ExampleConfigurationProvider extends HttpConfigurationProvider
{
@Override
public int priority()
{
return 10;
}
@Override
public Configuration getConfiguration(final ServletContext context)
{
return ConfigurationBuilder.begin()
.defineRule()
.when(Direction.isInbound().and(DispatchType.isRequest()).and(Path.matches(".*\\.xhtml")).andNot(Path.matches(".*javax.faces.resource.*")))
.perform(SendStatus.code(404));
}
}
यह पुनर्लेखन नियम .XHTML फाइलों पर भीतर का HTTP अनुरोध करने के लिए उपयोग को अवरुद्ध कर देगा, जबकि अभी भी अग्रेषित की अनुमति देता है, या त्रुटि, या async अनुरोधों। यह भी एक कार्यात्मक राज्य है, जो मामला नहीं है अगर आप जावा ईई सुरक्षा बाधा के रूप में एक और जवाब में सुझाव का प्रयोग JSF2 संसाधन एपीआई छोड़ देंगे।
आशा इस मदद करता है, लिंकन
@Christian Beikov से URL दर्ज 'यूआरएल-pattern' में अभिव्यक्ति से मेल खाता है तो आप एक HTTP 403, कोई बात नहीं क्या फिल्टर आप का उपयोग मिल जाएगा। एक साइड नोट के रूप में मैं उत्पादन वातावरण में इसके लिए एक सुरक्षा बाधा आधारित समाधान का उपयोग करता हूं, और अब तक मैं सीधे जेएसएफ पृष्ठों तक नहीं पहुंच सका। – BCsongor