別の可能な答え: jsf アプリケーションでセッション タイムアウトが発生した場合にインデックス ページにリダイレクトする方法
さらに別の可能な答え: を使用しJSF PhaseListener
ます。
さらに、セッションがすでに有効かどうかを確認するために a を使用することをお勧めしFilter
ます。そうでない場合は、カスタム エラー ページにリダイレクトします (おそらく BalusC を通じてこの方法をどこで学んだか覚えていません)。
public class AuthenticationFilter implements Filter {
private FilterConfig config;
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if(((HttpServletRequest) request).getSession().getAttribute("some_attribute_you_store_in_Session") == null){
((HttpServletResponse)response).sendRedirect("yourCustomJSF.jsf");
}else{
chain.doFilter(request, response);
}
}
public void destroy() {
this.config = null;
}
// You also have to implement init() and destroy() methods.
}
次に、このフィルター (およびフィルターをトリガーする URL パターン) を web.xml で宣言する必要があります。
<filter>
<filter-name>AuthenticationFilter</filter-name>
<filter-class>yourPackage.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthenticationFilter</filter-name>
<url-pattern>private.jsf</url-pattern>
</filter-mapping>
ユーザー情報を保持できるように、独自の Bean を JSF セッションに保存します。クラスへのアクセス中にフィルターがnull
リターンを受け取ると、セッションが無効になっていることがわかり (期限が切れたか、ユーザーがログアウトしたため)、リクエストをエラー ページにリダイレクトします。