前回の「TERASOLUNAのタグで検索結果ページリンクを簡単に」から、TERASOLUNA Server Framework for Java Web版(以下、TERASOLUNAフレームワーク)の応用編として、TERASOLUNAフレームワークが持っているWebアプリケーション開発に役立つさまざまな機能を紹介しています。
連載最終回の今回は、以下2つのセキュリティ機能を紹介します。
これまでと同様に、実際にWebアプリケーションを構築しながらこれらの機能を使っていきましょう。構築環境については、連載第3回の「iBATISのORMとSpringのAOPを活用したDBアクセス」を参照しておいてください。
TERASOLUNAフレームワークでは、ユーザーの名前や権限などのユーザー固有情報を、セッションの「UVO(User Value Object)」と呼ばれるオブジェクトに保持します。UVOを使用することで、ユーザー情報は各業務から共通的に参照できるようになります。
また、ユーザーごとのアクセス制御などの機能も実現できます。UVOを利用して、前回作成した一覧表示アプリケーションに、ログオン処理を追加してみましょう。
ログオン画面でユーザーIDを入力して、ログオンに成功した場合に一覧表示画面に遷移する処理を作成します。
図1 ログオン処理イメージ
入力されたユーザーIDに対して、該当する行がテーブルに存在すればログオン成功と判断します。ログオン成功した場合はUVOを生成します。追加・変更するファイルは以下のとおりです。
図2 追加・変更するファイル
ユーザー情報を格納するクラスを作成します。jp.terasoluna.fw.web.UserValueObjectを継承して、必要なプロパティを定義します。
リスト1 SampleUVO.java |
package sample2;
import jp.terasoluna.fw.web.UserValueObject;
public class SampleUVO extends UserValueObject {
// ユーザーID
private String userId;
// ユーザー名
private String userName;
// 年齢
private String age;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
} |
|
作成したクラスをUVOとして定義するには、プロパティ「user.value.object」を定義します。sourcesフォルダ直下のsystem.propertiesに以下の1行を追加します。
user.value.object=sample2.SampleUVO |
ログオン業務ロジックには、以下の実装をします。
- 入力されたユーザーIDでテーブルを検索して、ユーザー情報を取得
- (ユーザー情報があれば)UVOを生成してユーザー情報を格納
リスト2 業務ロジッククラス(LogonBLogic.java) |
package sample2;
import jp.terasoluna.fw.dao.QueryDAO;
import jp.terasoluna.fw.service.thin.BLogic;
import jp.terasoluna.fw.service.thin.BLogicResult;
import jp.terasoluna.fw.web.UserValueObject;
public class LogonBLogic implements BLogic<LogonInput> {
private QueryDAO queryDAO;
public void setQueryDAO(QueryDAO queryDAO) {
this.queryDAO = queryDAO;
}
public BLogicResult execute(LogonInput param) {
String userId = param.getUserId();
// ユーザーIDでテーブルを検索
UserBean user = queryDAO.executeForObject("getUser",
userId,UserBean.class);
// ユーザーIDがDB上になければログオン失敗とする
if (user == null) {
BLogicResult result = new BLogicResult();
result.setResultString("failure");
return result;
}
// UVOを生成
SampleUVO uvo = (SampleUVO) UserValueObject.
createUserValueObject();
uvo.setUserId(userId);
uvo.setUserName(user.getUserName());
uvo.setAge(user.getAge());
// 業務出力クラスを作成
LogonOutput output = new LogonOutput();
output.setUvo(uvo);
BLogicResult result = new BLogicResult();
result.setResultObject(output);
result.setResultString("success");
return result;
}
} |
|
業務入出力ファイルに、業務ロジックが出力したUVOをセッションに格納する設定を記述します。
リスト3 業務入出力ファイル(blogic-io.xml) |
<action path="/logonBL">
<blogic-params bean-name="sample.LogonInput">
<set-property property="userId" source="form" />
</blogic-params>
<blogic-result>
<set-property property="USER_VALUE_OBJECT"
blogic-property="uvo" dest="session" />
</blogic-result>
</action> |
|
次ページでは、ほかに必要なファイルを示し、実行してみます。さらに、もう1つの「アクセス権限チェック機能」について解説します。