I持ってJSFと春のセキュリティでタイムアウトと次のような問題:ユーザーがinvalidSessionUrlにリダイレクトされるように要求されたページが確保されているだけであれば、私はsessionmanagementフィルタをカスタマイズしたJSF春のセキュリティセッションタイムアウトviewExpiredException
(つまり、認証されたユーザーだけが許可されている場合)。私は春のセキュリティが提供するセッション管理フィルターに入れたカスタムコードは次のとおりです。
if (invalidSessionUrl != null) {
String pagSolicitada = UtilSpringSecurity.extraerPagina(request);
if (UtilSpringSecurity.paginaAutenticada(pagSolicitada)) {
request.getSession();
redirectStrategy.sendRedirect(request, response, invalidSessionUrl);
return;
}
//the requested page doesn't require the user to be authenticated
//so i just skip this filter and continue with the filter chain
chain.doFilter(request, response);
return;
}
方法「UtilSpringSecurity.extraerPagina(リクエスト)」要求されたページをこのように返します。
public static String extraerPagina (HttpServletRequest request) {
String uri = request.getRequestURI().toLowerCase();
String cPath = request.getContextPath().toLowerCase();
// uri = cPath + pagina
int longCPath = cPath.length();
String pagina = uri.substring(longCPath);
return pagina;
}
と方法「UtilSpringSecurity.paginaAutenticada(pagSolicitada)」は、paramがユーザーの認証を必要とするページである場合にtrueを返します(私のxmlセキュリティコンフィグファイルのインターセプト-url要素を考慮して、IFでチェックを行います。属性はaccess="isAuthenticated()"
です) :
public static boolean paginaAutenticada (String pagina) {
if (pagina.startsWith("/faces/paginas/administracion/") || pagina.startsWith("/faces/paginas/barco/")) {
return true;
}
return false;
}
このソリューションは動作しますが、それはただ一つの問題があります。私は、セッションタイムアウトの期限が切れるまでのページでアイドル滞在ブラウザを残す場合は
を、そして私は、私は「viewExpiredExceptionを取得し、同じページを要求します"これは、フィルタが正常に動作し、invalidSessionUrlへのリダイレクトをバイパスしたが、セッションが途中で終了したため、同じページを再レンダリングしようとする例外が発生するためです。
セッションのタイムアウトが切れたときに他のセキュリティ保護されていないページをリクエストした場合、正常に動作し、ページに正しくリダイレクトされ、viewExpiredExceptionが表示されません。
これを解決する方法は誰でも知っていますか?
ありがとうございます。
'invalidSessionUrlへのリダイレクトを迂回しましたが、セッションの有効期限が切れたため、同じページを再レンダリングしようとしました。私はこれが何を意味するのか分かりません。 invalidSessionUrlを再レンダリングすると、ViewExpiredExceptionが発生すると言っていますか? –
独自のセッション管理フィルタを作成するのはなぜですか? Springセキュリティでは、この機能をそのまま使用できます。あなたのSpring XML設定に ' ... session-management> ' –
あなたの1番目のコメントに答えてください:' invalidSessionUrlへのリダイレクトをバイパスしましたが、セッションが途中で終了すると、同じページを再度レンダリングしようとする例外が発生します。タイムアウトが発生したときにブラウザが表示している保護されていないページを再レンダリングすると、 "viewExpiredException"が発生することを意味します。これは、セッションが期限切れになっているため、JSFがページのビューを構築できないために発生します。 Spring Securityでは、ページが保護されていないため(これは問題ありません)、JSFがページを再レンダリングしようとすると例外がスローされるため、セッション管理フィルタがスキップされます。 – choquero70