2011-11-02 11 views
6

utworzyć filtr:Jak filtr sieciowy w JSF 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() { 
    } 
} 

To jest moja konstrukcja:

enter image description here

A potem dodać filtr w 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> 

pracach filtracyjnych tak jak powinien, ale wciąż daje mi ten błąd:

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

A potem moje richfaces już nie działają.

Jak mogę to rozwiązać? Lub utwórz poprawnie filtr sieciowy?

+0

To dziwny komunikat o błędzie. Czy przetłumaczyłeś go z innego języka? Czy jest to tylko błąd HTTP 404? – BalusC

+0

Mam BalusC, jestem z Brazylii, więc błąd pojawia mi się w języku portugalskim, czy wiesz jak zmienić Eclipse na angielski? Więc mógłbym opublikować oryginalny błąd. –

+2

Domyślny język Eclipse zależy od domyślnego ustawienia regionalnego platformy. Jeśli więc twój system operacyjny ustawiony jest na portugalski, Eclipse odziedziczy to ustawienie. Ale możesz to zmienić, podając argument '-nl [languagecode]' w pliku 'eclipse.exe'. Np .: 'eclipse.exe -nl en' ustawi to na angielski. – BalusC

Odpowiedz

9

Dowolny adres URL ścieżki (tj. Adresy URL, które nie rozpoczynają się od /), który zostanie przekazany do sendRedirect(), będzie odnosił się do bieżącego identyfikatora URI żądania. Rozumiem, że strona logowania jest pod adresem http://localhost:8080/contextname/login.xhtml. Tak więc, jeśli na przykład uzyskasz dostęp do http://localhost:8080/contextname/pages/user/some.xhtml, to przekierowanie będzie wskazywać na http://localhost:8080/contextname/pages/user/login.xhtml, co moim zdaniem nie istnieje. Ponownie spójrz na adres URL w pasku adresu przeglądarki.

Aby rozwiązać ten problem, zamiast tego należy zamiast tego przekierować się na adres URL związany z domeną, np. Rozpocząć adres URL pod numerem /.

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

dziękuję mate =] –

+0

Nie ma za co. – BalusC