2011-11-02 13 views
6

मैं यह फ़िल्टर बनाता हूं:जेएसएफ 2 में वेब फ़िल्टर कैसे करें?

public class LoginFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest req = (HttpServletRequest) request; 
     HttpSession session = req.getSession(); 

     if (session.getAttribute("authenticated") != null || req.getRequestURI().endsWith("login.xhtml")) { 
      chain.doFilter(request, response); 
     } else { 
      HttpServletResponse res = (HttpServletResponse) response; 
      res.sendRedirect("login.xhtml"); 
      return; 
     } 

    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 

    } 

    @Override 
    public void destroy() { 
    } 
} 

यह मेरी संरचना है:

enter image description here

और फिर मैं web.xml में फ़िल्टर जोड़ता हूं:

<filter> 
    <filter-name>LoginFilter</filter-name> 
    <filter-class>filter.LoginFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>LoginFilter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

फ़िल्टर के रूप में काम करता है यह मुझे यह त्रुटि दे रहा है:

"Was not possible find or provider the resource, login" 

और उसके बाद मेरे richfaces अब और काम नहीं करता है।

मैं इसे कैसे हल कर सकता हूं? या एक वेब फिल्टर सही ढंग से बनाएँ?

+0

यह एक अजीब त्रुटि संदेश है। क्या आपने इसे दूसरी भाषा से अनुवादित किया था? क्या यह सिर्फ एक HTTP 404 त्रुटि है? – BalusC

+0

मैं बलुस करता हूं, मैं ब्राजील से हूं, इसलिए मुझे पुर्तगाली में त्रुटि दिखाई देती है, क्या आप जानते हैं कि मैं ग्रहण को अंग्रेजी में कैसे बदलूं? तो मैं मूल त्रुटि पोस्ट कर सकता था। –

+2

ग्रहण की डिफ़ॉल्ट भाषा प्लेटफार्म डिफ़ॉल्ट लोकेल पर निर्भर है। तो यदि आपका ओएस पुर्तगाली पर सेट है, तो ग्रहण इस सेटिंग का उत्तराधिकारी होगा। लेकिन आप 'eclipse.exe' पर '-nl [languagecode]' तर्क निर्दिष्ट करके इसे ओवरराइड कर सकते हैं। उदा। 'Eclipse.exe -nl en' इसे अंग्रेजी में सेट करेगा। – BalusC

उत्तर

9

कोई भी पथ-संबंधित यूआरएल (यानी यूआरएल जो / से शुरू नहीं होता है) जो आप sendRedirect() पर पास करते हैं, वर्तमान अनुरोध यूआरआई के सापेक्ष होगा। मैं समझता हूं कि लॉगिन पृष्ठ http://localhost:8080/contextname/login.xhtml पर है। इसलिए, यदि आप उदाहरण के लिए http://localhost:8080/contextname/pages/user/some.xhtml एक्सेस करते हैं, तो यह रीडायरेक्ट कॉल वास्तव में http://localhost:8080/contextname/pages/user/login.xhtml पर इंगित करेगा, जो मुझे लगता है कि मौजूद नहीं है। एक बार फिर से अपने ब्राउज़र पता बार में यूआरएल देखें।

इस समस्या को ठीक करने के लिए, बजाय इसके बजाय किसी डोमेन-रिश्तेदार URL पर रीडायरेक्ट करें, यानी / के साथ URL प्रारंभ करें।

res.sendRedirect(req.getContextPath() + "/login.xhtml"); 
+0

धन्यवाद दोस्त =] –

+0

आपका स्वागत है। – BalusC

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