セッションとログイン画面

  メニュー画面 と ログイン画面



セッションオブジェクトに、ユーザIDがセットされているかいないかで、メニュー画面を表示するかログイン画面を表示するかを決定します。一度でもログインしていた場合は、ブラウザが閉じられるか、セッションのタイムアウトまで再びログイン画面に移動する事はありません。

セッション項目は、"UserName""TargetURL" という二つでコントロールします
( session は、HttpSession クラスです )

画面の移動には、forward では無く sendRedirect を使用します。forward は前の画面の情報を引き継ぐので、別処理間で使用すると思わぬ結果になります

  
<%@ page
	language="java"
	import="java.util.*"
	contentType="text/html;charset=Shift_JIS"
%>
<%
// *********************************************************
// menu.jsp
// *********************************************************
	out.println( session.getMaxInactiveInterval() + "<br>" );

// *********************************************************
// セッションオブジェクトの取得
// *********************************************************
	Object UserName;
	UserName = session.getAttribute( "UserName" );

	// *****************************************************
	// 未ログインならば、login.jsp へ移動
	// *****************************************************
	if ( UserName == null ) {
		session.setAttribute( "TargetURL", "menu.jsp" );
		application.log( "menu.jsp --> login.jsp"  );
		response.sendRedirect( "login.jsp" );
		return;
	}

// *********************************************************
// 以下画面定義
// *********************************************************
%>
<HTML>
<BODY>
<CENTER>
<H1>メニュー</H1>
<A href=act1.jsp>処理1</a><br><br>
<A href=act2.jsp>処理2</a><br><br>
</CENTER>
</BODY>
</HTML>

  

先頭でセッションのタイムアウト時間を表示しています。セッションをテストするのに、デフォルト(1800秒) では長すぎる為、login.jsp で 10 秒に変更しています。タイムアウトのテストと言うのは、画面を表示したままほったらかしにしておいて、その画面から再び処理しようとした時にはセッションが無効になっているという想定です。同様に、URL を指定して menu 以外の画面から処理しようとする事も想定しています。

タイムアウト関係を処理する getMaxInactiveInterval と setMaxInactiveInterval は例外を発生しません。他の殆どのセッション関係のメソッドは、セッションが無効となっている時に実行すると例外が発生するようになっていますが。どうも、そうでも無いようです。厳密にテストしなければ解りませんが、getAttribute ではそのような事がおこりませんでした。

  
<%@ page
	language="java"
	import="java.util.*"
	contentType="text/html;charset=Shift_JIS"
%>
<%
// *********************************************************
// login.jsp
// *********************************************************
	session.setMaxInactiveInterval(10);
	out.println( session.getMaxInactiveInterval() + "<br>" );

// *********************************************************
// 入力データの取得
// *********************************************************
	String UserName;
	UserName = request.getParameter( "UserName" );

// *********************************************************
// 入力データのチェック
// *********************************************************
	if ( UserName != null ) {
		if ( UserName.equals( "lightbox" ) ) {
			// *********************************************
			// いったんセッションが無効になっていた場合
			// *********************************************
			if ( session.getAttribute( "TargetURL" ) == null ) { 
				session.setAttribute( "TargetURL", "menu.jsp" );
			}

			// *********************************************
			// ユーザ名をセット
			// *********************************************
			session.setAttribute( "UserName", UserName );

			// *********************************************
			// 呼び出し元へ移動
			// *********************************************
			String Target;
			Target = session.getAttribute( "TargetURL" ).toString();
			application.log( "login.jsp --> " + Target );
			response.sendRedirect( Target );
			return;
		}
	}

// *********************************************************
// 以下画面定義
// *********************************************************
%>
<HTML>
<BODY>
<CENTER>
<H1>ログイン</H1>
<FORM method="post" action="login.jsp">
	ユーザ名&nbsp;&nbsp;<INPUT type="text" name="UserName">
	<INPUT type="submit" name="send" value="送信">
</FORM>
</CENTER>
</BODY>
</HTML>

  

ちゃんと動くようになるまで、想像しずらい動きをしますので、application.log というログ出力を行なっています。このログは "C:\Tomcat5.0\logs" に出力されます。




  一般処理画面 と ログイン画面



基本的に menu.jsp と同じです。普通は、セッションが無効となった状態でこの画面にアクセスすると、ログイン画面へ誘導されてログイン確認後この画面へ戻ってきます。もし、ログイン画面でセッションが無効になった場合は、ここではなくメニューへ誘導されます。

  
<%@ page
	language="java"
	import="java.util.*"
	contentType="text/html;charset=Shift_JIS"
%>
<%
// *********************************************************
// act1.jsp
// *********************************************************
	out.println( session.getMaxInactiveInterval() + "<br>" );

// *********************************************************
// セッションオブジェクトの取得
// *********************************************************
	Object UserName;
	UserName = session.getAttribute( "UserName" );

	// *****************************************************
	// 未ログインならば、login.jsp へフォーワード
	// *****************************************************
	if ( UserName == null ) {
		session.setAttribute( "TargetURL", "act1.jsp" );
		application.log( "act1.jsp --> login.jsp" );
		response.sendRedirect( "login.jsp" );
		return;
	}

// *********************************************************
// 以下画面定義
// *********************************************************
%>
<HTML>
<BODY>
<CENTER>
<H1>処理1</H1>
</CENTER>
</BODY>
</HTML>

  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ