2011-11-02 12 views
6

creo questo filtro:Come si fa un filtro web in 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() { 
    } 
} 

Questa è la mia struttura:

enter image description here

E poi aggiungo il filtro nel 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> 

Le opere di filtro come dovrebbe, ma continua a darmi questo errore:

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

E in seguito il mio richfaces non funziona più.

Come posso risolvere quello? O creare correttamente un filtro web?

+0

Questo è un messaggio di errore strano. L'hai tradotta da un'altra lingua? È solo un errore HTTP 404? – BalusC

+0

Faccio BalusC, vengo dal Brasile, quindi l'errore mi sembra in portoghese, sai come posso cambiare l'Eclipse in inglese? Quindi potrei postare l'errore originale. –

+2

La lingua predefinita di Eclipse dipende dalla locale predefinita della piattaforma. Quindi se il tuo sistema operativo è impostato su portoghese, allora Eclipse erediterà questa impostazione. Ma puoi sovrascriverlo specificando l'argomento '-nl [languagecode]' su eclipse.exe'. E.g .: 'eclipse.exe -nl it lo imposterà in inglese. – BalusC

risposta

9

Qualsiasi URL relativo al percorso (ad esempio URL che non iniziano con /) che si passa a sendRedirect() sarà relativo all'URI della richiesta corrente. Comprendo che la pagina di accesso è http://localhost:8080/contextname/login.xhtml. Quindi, se per esempio accedi a http://localhost:8080/contextname/pages/user/some.xhtml, allora questa chiamata di reindirizzamento punterà effettivamente a http://localhost:8080/contextname/pages/user/login.xhtml, che a mio avviso non esiste. Guarda ancora l'URL nella barra degli indirizzi del tuo browser.

Per risolvere questo problema, piuttosto reindirizzare a un URL relativo al dominio, ad esempio, avviare l'URL con /.

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

grazie amico =] –

+0

Prego. – BalusC

Problemi correlati