2011-11-02 35 views
6

tôi có thể tạo bộ lọc này:Làm cách nào để lọc web trong 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() { 
    } 
} 

Đây là cấu trúc của tôi:

enter image description here

Và sau đó tôi thêm bộ lọc vào 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> 

Các công trình lọc nhưng vẫn giữ cho tôi lỗi này:

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

Và sau đó richfaces của tôi không hoạt động nữa.

Tôi làm cách nào để giải quyết vấn đề này? Hoặc tạo bộ lọc web chính xác?

+0

Đó là thông báo lỗi lạ. Bạn đã dịch nó từ một ngôn ngữ khác? Nó chỉ là lỗi HTTP 404? – BalusC

+0

Tôi làm BalusC, tôi đến từ Brazil, vì vậy lỗi xuất hiện với tôi bằng tiếng Bồ Đào Nha, bạn có biết làm cách nào để thay đổi Eclipse sang tiếng Anh không? Vì vậy, tôi có thể đăng lỗi ban đầu. –

+2

Ngôn ngữ mặc định của Eclipse phụ thuộc vào ngôn ngữ mặc định nền tảng. Vì vậy, nếu hệ điều hành của bạn được đặt thành tiếng Bồ Đào Nha, thì Eclipse sẽ kế thừa cài đặt này. Nhưng bạn có thể ghi đè điều này bằng cách chỉ rõ đối số '-nl [languagecode]' trên 'eclipse.exe'. Ví dụ: 'eclipse.exe -nl en' sẽ đặt thành tiếng Anh. – BalusC

Trả lời

9

Bất kỳ URL nào tương đối đường dẫn (tức là URL không bắt đầu bằng /) mà bạn chuyển đến sendRedirect() sẽ liên quan đến URI yêu cầu hiện tại. Tôi hiểu rằng trang đăng nhập là http://localhost:8080/contextname/login.xhtml. Vì vậy, nếu bạn truy cập ví dụ http://localhost:8080/contextname/pages/user/some.xhtml, thì cuộc gọi chuyển hướng này thực sự sẽ trỏ đến http://localhost:8080/contextname/pages/user/login.xhtml, điều mà tôi cho rằng không tồn tại. Xem lại URL trong thanh địa chỉ trình duyệt của bạn một lần nữa.

Để khắc phục vấn đề này, thay vào đó hãy chuyển hướng đến URL tương đối của tên miền, ví dụ: bắt đầu URL với /.

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

cảm ơn bạn đời =] –

+0

Bạn được chào đón. – BalusC

Các vấn đề liên quan