2011-11-02 7 views
6

私はこのフィルタを作成します。JSF 2でどのようにWebフィルターを使用しますか?

enter image description here

そして私は、web.xmlにフィルタを追加します:

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() { 
    } 
} 

は、これが私の構造体である

<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はもはや動作しません。

どうすれば解決できますか?または、Webフィルタを正しく作成しますか?

+0

これは奇妙なエラーメッセージです。それを他の言語から翻訳しましたか?それは単なるHTTP 404エラーですか? – BalusC

+0

私はBalusCをしています。私はブラジル出身ですから、ポルトガル語でエラーが表示されます。どうすればEclipseを英語に変更できますか?だから私は元のエラーを投稿することができます。 –

+2

Eclipseのデフォルト言語は、プラットフォームのデフォルトロケールに依存します。したがって、OSがポルトガル語に設定されている場合、Eclipseはこの設定を継承します。しかし、 'eclipse.exe'で' -nl [languagecode] '引数を指定することでこれを無効にすることができます。例: 'eclipse.exe -nl en'は英語に設定します。 – BalusC

答えて

9

sendRedirect()に渡すパス相対URL(つまり、/で始まらないURL)は、現在のリクエストURIからの相対パスになります。ログインページはhttp://localhost:8080/contextname/login.xhtmlです。したがって、たとえばhttp://localhost:8080/contextname/pages/user/some.xhtmlにアクセスすると、このリダイレクトコールは実際にはhttp://localhost:8080/contextname/pages/user/login.xhtmlを指していますが、これは存在しないと思います。ブラウザのアドレスバーにあるURLをもう一度見てください。

この問題を解決するには、代わりにドメイン相対URLにリダイレクトします。つまり、/でURLを開始します。

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

ありがとうございます。] –

+0

よろしくお願いいたします。 – BalusC

関連する問題