Spring MVCブロックはワンポイント登録が可能です.

4957 ワード

シングルポイント登録の機能は、実際のアプリケーションシーンではまだ重要です.論理的には一人のユーザが同時に二つの操作を行っていることは許されません.次に、SpringMVCのシングルポイント登録の実現を確認します.
SpringMVCのブロックはSpringのブロックと違って、SpringMVCは統一的な入口DisplatServletを持っています.すべての要求はDisplatch Servletを通しています.だからDisplatch Servletだけで文章を作成すればいいです.Displatch Servletも代理店がありません.
1,まず基本的な実現原理を探究します.この機能はやはり比較的簡単で、同じウェブプロジェクトに対して同じ時間に一人のユーザーが操作しているだけです.ここでは異郷登録の発見に触れます.その後、自動的にプッシュして、最初のユーザーIDの異郷登録を教えます.2はユーザーが操作する時自分のアカウントが押されていることを発見して、異郷の登録があります.この二つの案については、第一にリアルタイム性がありますが、まだ検討中です.以下に第二の方法を重点的に説明します.
2つの操作は、ユーザーテーブルにもう一つのフィールドを追加し、ログインユーザのSessionIdを記憶するために使用される.なぜなら、各request要求は一つの重複しないSessionidに対応しているからである.スクリーンショットでは、まず登録ページの関連url要求を実行し、そして登録検査の要求を実行します.最後にユーザーをフィルタリングします.(ユーザ登録については、認証に成功した場合、ユーザーをSessioningに登録ブロックの検証に預けるだけでなく、SessionidのIDをユーザーテーブルに対応するSessionidに保存する必要があります.)今回要求されたrequestはSessionとそのIDを取得してからこのIDに基づいてデータベースのSessionidと比較します.同じかどうかはオープンします.一回のユーザ接続サーバの操作にはSessionが存在します.Sessionが期限切れにならない限り、ユーザが開始する操作ごとにrequestのSessionのidが一致します.登録時にデータベースに保存するIDと一致します.他の人が他のデバイスを通して同じアカウントでログインすると、Sessionidを更新して、自分のSessionidを更新しますが、データベースのSessionidは変更されていますので、データベースのSessionidが一致しているかどうかを検証すると失敗します.ユーザ操作がシングルユーザー登録の機能に達すると、ブロックされます.(Sessionについての説明では、ユーザが初めてサーバと接続するとサーバ端でSessionを作成し、その後にユーザが開始する操作ごとにrequestにこのSessionのIDを携帯して、いくつかの場合にSessionが無効になり、ユーザが長い間サービスとの間で操作を行わず、ユーザがログインを終了してアクティブにSessionが無効になり、ユーザがブラウザをオフする、またはブラウザをオフする.者サーバ再起動)
以下はSpring MVCの中でブロックの実現です.

public class SingleUserInterceptor implements HandlerInterceptor {
	@Autowired
	private userMapper mapper;
	public void afterCompletion(HttpServletRequest arg0,
	HttpServletResponse arg1, Object arg2, Exception arg3)
	throws Exception {
		// TODO Auto-generated method stub
	}
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
	Object arg2, ModelAndView arg3) throws Exception {
		// TODO Auto-generated method stub
	}
	public Boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
	Object arg2) throws Exception {
		String url = arg0.getRequestURI();
		//                 
		if(url.indexOf("login.jsp")>=0||url.indexOf("new/login")>=0||url.indexOf("checkuser")>=0){
			return true;
		}
		//         (     ) 
		Integer user = (Integer) arg0.getSession().getAttribute("user");
		if(user!=null){
			String sessionid = mapper.getUserEntity(Integer.valueOf(user)).getSessionid();
			if(sessionid.equals(arg0.getSession().getId())){
				return true;
			} else{
				arg1.setStatus(arg1.SC_GATEWAY_TIMEOUT);
				arg1.setContentType("text/html; charset=utf-8");
				PrintWriter out = arg1.getWriter();
				out.println("");
				out.println("");
				out.println("alert('         ,     ')");
				out.println("window.open ('" + arg0.getContextPath()
				+ "/new/login','_top');");
				out.println("");
				out.println("");
				// arg0.getRequestDispatcher("login.jsp").forward(arg0, arg1);
				return false;
			}
		}
		arg0.getRequestDispatcher("login.jsp").forward(arg0, arg1);
		return false;
	}
}
以上のコードで同じユーザが複数回ログインすると、最初のログインユーザが操作中に割り込みされる機能を実現し、先にアカウントの異郷登録を提示してからログインページにジャンプする機能を実現できます.ここではこの簡単なalertヒント機能を説明する必要があります.これが必要であれば、要求を終了させて、その後、reponセの印刷機能はそのalertの提示文を出力します.だから注釈されたジャンプ文はありません.あるとalert提示文は出ません.あなたの操作は正しい終了ではなく、転送されたり、他の操作にリダイレクトされたりしています.正しいかどうかは別のactionからページに出力されたので、あなたのreponse印刷文は現れません.正しいです.ブロック要求は行を放しません.この時は要求は元の要求です.ジャンプはしません.レスポンスがページに戻る印刷情報は表示できます.ジャンプ登録ページはout.printel(「window.open」+arg 0.get ContextPath()+「new/logn',top'」となります.;レスポンスが出力したセグメントjsでaction要求を実行し、ログインページを指します.
上のコードによって基本的にはシングルユーザー登録の機能が実現されていますが、ajax要求の操作はリモートログイン時にログインページを指してもヒントがないことが分かります.まずその理由を説明します.ajaxの場合は、非同期のお願いをします.また、プロセッサマッパーに要求のurlがマッチしていますので、要求が成功したと見なされます.(ステータスコードが200に戻ります)上記のレスポンスで印刷されたjs文はsuccessで成功を求められます.戻り値は、上記の言葉を試してみてもいいです.arg 1.set Status(arg 1.SCugatewaYuTIMEOUT).コメントします.他の操作が必要です.まずは先ほど述べたステートメントのTEarg 1.TEOUTです.彼の機能は、レスポンスを設定して返信する状態コードであり、上の設定は、ステータスコード504が要求に対してエラーを表すことを示しています.このときajax要求はsuccess方法では応答せず、ajaxのerror方法に応答するので、ajaxのerrorで対応する方法を実行するだけでよいです.

 $.ajax({
  url:'new/msd2',
  success:function(a){
  alert(a);
  },
  error:function(rs){
  if(rs.status==504){
  document.write(rs.responseText);
  }
  }
  }); 
ajax要求が異郷登録のためにブロックされた場合、arg 1.set Startusを設定することによって、要求の戻り状態を504エラーにして、その後error方法で応答し、状態が自分で設定した状態コードであると判断した場合、document.write(RS.reponseText)を返します.reponseTextは、スクリーンショットでフロントに印刷されたjs文であり、これらの文が実行されるには、document.write()が必要である.方法は、それらのコードをdomに書き込んで有効にする.これで、すべての要求は、非同期ajax要求のシングルポイント登録がほぼ実現された.
この文を残しておいて、キーコードと思想と操作の原理だけを記録します.
締め括りをつける
以上、本文ではSpring MVCブロックについて、単点登録を実現するためのすべての内容について、皆さんに助けてもらいたいと思います.