TERASOLUNAのセキュリティ機能でWebアプリを強化 : オープンソースTERASOLUNAで作るWebアプリ(5) (2/3 ページ)
ログオン画面と、ログオン成功画面を作成します。ログオン画面ではユーザーIDを入力します。
リスト4 ログオン画面(logon.jsp)
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/struts-html" prefix="html"%>
<%@ taglib uri="/terasoluna-struts" prefix="ts"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>ログオン画面</title>
</head>
<ts:body >
<ts:form action="/logonBL">
ユーザーID:<html:text property="userId" />
<ts:submit value="送信" />
</ts:form>
</ts:body>
</html:html>
ログオン成功画面では、セッションからUVOを取得してユーザー情報を表示します。
リスト5 ログオン成功画面(certified.jsp)
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/struts-html" prefix="html"%>
<%@ taglib uri="/struts-bean" prefix="bean"%>
<%@ taglib uri="/struts-logic" prefix="logic"%>
<%@ taglib uri="/terasoluna-struts" prefix="ts"%>
<%@ taglib uri="/terasoluna" prefix="t"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=shift_jis">
<title>ログオン画面</title>
</head>
<ts:body>
<ts:form action="listBL">
ログオン成功<br />
ユーザーID:
<bean:write name="USER_VALUE_OBJECT" property="userId"
scope="session" />
<br />
ユーザー名:
<bean:write name="USER_VALUE_OBJECT" property="userName"
scope="session" />
<br />
年齢:
<bean:write name="USER_VALUE_OBJECT" property="age"
scope="session" />
<br />
<ts:submit >ユーザー一覧</ts:submit>
<br />
<ts:link action="/logonSCR">ログオン画面へ戻る</ts:link>
</ts:form>
</ts:body>
</html:html>
リスト6 業務入力クラス(LogonInput.java)
package sample2;
public class LogonInput {
// ユーザーID
private String userId;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}
リスト7 業務出力クラス(LogonOutput.java)
package sample;
package sample2;
public class LogonOutput {
// ユーザー情報オブジェクト
private SampleUVO uvo;
public SampleUVO getUvo() {
return uvo;
}
public void setUvo(SampleUVO uvo) {
this.uvo = uvo;
}
}
リスト8 struts-config.xml(form-beans要素)
<form-bean name="logon"
type="jp.terasoluna.fw.web.struts.form.DynaValidatorActionFormEx">
<form-property name="userId" type="java.lang.String"/>
</form-bean>
リスト9 struts-config.xml(action-mappings要素)
<action path="/logonBL" name="logon">
<forward name="success" path="/logonSuccessSCR.do"/>
<forward name="failure" path="/logonSCR.do"/>
</action>
<action path="/logonSCR" parameter="logon.jsp" />
<action path="/logonSuccessSCR" parameter="logonSuccess.jsp" />
SQL定義ファイルに、ユーザーを検索するSQLを記述します。
リスト10 sqlMap.xml(sqlMap.xml)
<select id="getUser" parameterClass="java.lang.String"
resultClass="sample2.UserBean">
SELECT ID AS "userId", NAME AS "userName", AGE AS "age"
FROM USERLIST WHERE id = #value #
</select>
リスト11 Bean定義ファイル(moduleContext.xml)
<bean class="jp.terasoluna.fw.web.struts.actions.BLogicAction"
name="/logonBL" scope="singleton">
<property name="businessLogic" ref="logonBLogic" />
</bean>
<bean class="sample2.LogonBLogic" id="logonBLogic"
scope="singleton">
<property name="queryDAO" ref="queryDAO" />
</bean>
<bean name="/logonSCR" scope="singleton"
class="jp.terasoluna.fw.web.struts.actions.ForwardAction" />
<bean name="/certifiedSCR" scope="singleton"
class="jp.terasoluna.fw.web.struts.actions.ForwardAction" />
動作確認してみましょう。Webブラウザに以下のURLを入力します。
http://localhost:8080/terasoluna-sample/logonSCR.do
ログオン画面が表示されます(図3 )。
図3 ログオン画面
ユーザーID(1〜40)を入力すると、ログオン成功画面に遷移します(図4 )。
図4 ログオン成功画面
例えば管理者専用画面のように、ユーザー権限によってアクセス可否を制御したいことがあります。そのようなときは「アクセス権限チェック機能」を使用します。
例として、ユーザー一覧画面へのアクセスを制限してみましょう。ユーザーIDが10以上のユーザーに対して、以下のようなアクセス制限を掛けます。
ユーザー一覧画面にアクセスできない
ログオン成功画面からユーザー一覧画面への遷移ボタンが表示されない
アクセス権限チェックはサーブレットフィルタを用いて実現されています。開発者が実装するのは以下の2つのチェックロジックです。
メソッド「boolean isCheckRequired(ServletRequest)」 アクセス権限チェックを掛けるべきリクエストかどうかを判断。falseを返すとアクセス権限チェックは実行されない。今回は、リクエストパスが「/list」で始まる場合はtrueを返す(チェックが必要)とする
メソッド「boolean isAuthorized(String, ServletRequest)」 アクセス権限の有無を判断。falseを返すとアクセス権限なしとして、例外UnauthorizedExceptionがスローされる。今回は、ユーザーIDが9以下であればtrueを返す(アクセス権がある)とする
アクセス権限チェックのクラスは、インターフェイス「jp.terasoluna.fw.web.thin.AuthorizationController」を実装して作成します。
図5 アクセス権限チェックイメージ
それでは、次ページ で実装して動作確認をしてみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.