こんにちは、struts と jsp を使用してアプリケーションを開発しています。jsp では、Ajax 呼び出しを使用しています。セッション タイムアウト後、ログイン ページにリダイレクトしています。しかし問題は、ログインページに同じdivタグが表示されていることです.私はセッションでユーザーをチェックしているか、jspのjavascriptでチェックしていますが、常にセッションにはuserid値があり、セッションが期限切れになった場合でもnullになることはありません.
4 に答える
2つのこと
- web.xmlでウェルカムページをログインページとして構成します
- フィルタを作成し、web.xmlで構成します。これは、web.xmlの最初のフィルタである必要があります。
- フィルタで、セッションが新しいかどうかを確認し、ユーザーをログインページに誘導する必要があります。そうでない場合は、要求を処理する必要があります。
最近、まさにこれについてのチュートリアルを作成しました。多分それは役立つかもしれません。abhi が提案したのと同じ解決策ですが、例があります。
http://classfoundexception.blogspot.com.es/2012/04/how-to-secure-struts-13-application.html
To handle Session Timeout/Expire for Ajax Call Request and to dispatch it to login page follows these steps.
1) In Your jsp wherever ajax function are written Set a header before your ajax send request.
req.open("POST", Servlet_PATH, true);
req.setRequestHeader("X-Requested-With", "XMLHttpRequest"); //set header
req.send();
2) In a Filter get the header like this and if session is null send as an Response Error
httpRequest.getHeader("X-Requested-With");
if (session == null) {
`if(httpRequest.getHeader("X-Requested-With")!=null && httpRequest.getHeader("X-Requested-With").equals("XMLHttpRequest")){`
`logger.info("Ajax Expired...");`
`((HttpServletResponse)response).sendError(403);` // Response error set
`return;`
`}}`
3) In jsp whereever ajax code is written check request.readystate and request.state like this
if (req.readyState==4 && req.status==200)
{
//your logic
}
else if(req.readyState==4 && req.status==403){
alert("Your Session is Expired.Please Relogin.");
window.location.href = "<%=request.getContextPath()%>/jsp/login.jsp";
}
新しいリクエストが来るたびに、サーバー側でセッションをチェックして検証する必要があります。また、このタイムアウトは Web サーバーによって処理されます。タイムアウトが発生すると、自動的にサーバーがユーザーを にリダイレクトしますsession logout URL
。この構成は、サーバーの conf ファイルで変更できます。
詳細については、これを参照してください