2013-04-20 16 views
6

Các ứng dụng JSF có thể ném ViewExpiredException giây khi phiên hết hạn. Sự kiện này sẽ khá phổ biến khi có khách trên hệ thống của bạn. Do các ứng dụng sẽ xử lý sự kiện này mà không có bất kỳ rắc rối cho khách, như sau:ViewExpiredException được xử lý bởi trang lỗi, vẫn trong nhật ký

<error-page> 
    <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
    <location>/expired</location> 
</error-page> 

Khi một khách cố gắng để gửi một yêu cầu trên một phiên hết hạn, ông sẽ được chuyển đến /expired. Vì tôi không xem vấn đề này là Exception như một vấn đề đáng nói, tôi muốn ngăn chặn việc viết stacktrace vào nhật ký máy chủ ứng dụng của tôi.

Tôi làm cách nào để thực hiện việc này?

Trả lời

7

Về cơ bản có 2 tùy chọn mà mỗi lần đun sôi xuống cùng một giải pháp: bắt, chặn và điều hướng đến trang lỗi một mình bằng cách sử dụng servlet filter hoặc JSF exception handler. Bằng cách này, ngoại lệ sẽ không đạt được servletcontainer mà sau đó sẽ xử lý và tự động đăng nhập. Được cung cấp trang lỗi thực sự là công việc cho bạn (điều này không làm việc với các yêu cầu JSF ajax, trừ khi bạn đã tùy chỉnh JSF ExceptionHandler), thì một bộ lọc servlet được ánh xạ trên mẫu URL khớp với các yêu cầu JSF. sau trong phương pháp doFilter() của nó là đủ:

try { 
    chain.doFilter(request, response); 
} catch (ServletException e) { 
    if (e.getRootCause() instanceof ViewExpiredException) { 
     request.getRequestDispatcher("/expired").forward(request, response); 
    } else { 
     throw e; 
    } 
} 

Nếu bạn muốn bao gồm yêu cầu JSF ajax là tốt, thì bạn không thể đi xung quanh một handler ngoại lệ JSF. Trưởng các câu trả lời liên quan sau đây để xem một số ví dụ cụ thể:

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