このトピックに関する多くの記事を見てきましたが、私の場合にはうまくいくソリューションを手に入れることができませんでした。HttpSessionタイムアウト後のリダイレクト
私は私が持っている私のweb.xml
ではJSF 2.0を使用してJava EE 6(7.1はJBoss AS上で展開)
を使用しています:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
と私は、ユーザーがログインページにリダイレクトされるようにしたいセッションが自動的にタイムアウトしたとき。
アプローチ1:私は
<filter-mapping>
<filter-name>TimeOutFilter</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
を試してみましたweb.xml
で @WebFilter()
public class TimeOutFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
System.out.println("filter called");
final HttpServletRequest req = (HttpServletRequest) request;
final HttpSession session = req.getSession(false);
if (session != null && !session.isNew()) {
chain.doFilter(request, response);
} else {
System.out.println("Has timed out");
req.getRequestDispatcher("/logon.xthml").forward(request, response);
}
}
@Override
public void destroy() {
}
}
:私は次のフィルタを試してみましたフィルター
を使用して、私が試してみました何
と
<filter-mapping>
<filter-name>TimeOutFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
フィルターは、すべての要求(コンソールで「フィラー」と呼ばれる)のログとして呼び出されるため、機能します。 ただし、セッションがタイムアウトすると呼び出されません。
アプローチ2:HttpSessionLister
私はHttpSessionListerner
を使用しようとしました。次のシグネチャを持つメソッドが呼び出されました。
public void sessionDestroyed(HttpSessionEvent se) {
}
特定のページにリダイレクトできませんでした。ユーザーをリダイレクトする場合は、通常、のNavigationHandler
を使用しますが、この場合はFacesContext
(FacesContext.getCurrentInstance()
が返されます。null
)はありません。
このpostによると、HttpListenerは要求の一部ではないため、ユーザーをリダイレクトできません。
質問
この問題を解決するために行くための最善の方法は何ですか?上記の2つのアプローチのいずれかを機能させるために私は何ができますか?
関連:http://stackoverflow.com/q/をウェブソケット仕様は、リンクの下に存在し、 4992526/1065197 –
@ LuigiMendoza:面白いおかげです。私は 'ViewExpiredException'を見たことがありませんが、可能であれば、ユーザが何もクリックすることなくログインページにリダイレクトしたいと思います。 – phoenix7360
サーバー側で302をトリガーするには、クライアント側で何らかのポーリング形式が必要です。ハートビート... –