こんにちは、struts2 アプリケーションにロールベースのセキュリティを適用しようとしていますが、機能するチュートリアルが見つかりませんでした。それらのほとんどは xml ファイルでユーザー名とパスワードを定義していますが、データベースにアクセスできるものを探しています。
私がしたいこと :
ユーザーがアクセスデータベースにログインしているときにログインページを作成して、ロールに基づいてアプリケーションのさまざまなリソースへのアクセスを承認および提供します。
こんにちは、struts2 アプリケーションにロールベースのセキュリティを適用しようとしていますが、機能するチュートリアルが見つかりませんでした。それらのほとんどは xml ファイルでユーザー名とパスワードを定義していますが、データベースにアクセスできるものを探しています。
私がしたいこと :
ユーザーがアクセスデータベースにログインしているときにログインページを作成して、ロールに基づいてアプリケーションのさまざまなリソースへのアクセスを承認および提供します。
このセキュリティには 2 つのレベルがあります。 1. サーバー側 2. クライアント側
最初に、役割ベースのタスク権限を示す task_permissions と言うデータベースにテーブルをセットアップする必要があります。
次に、この方法はサーバー側で役立ちます
private boolean isTaskOpAllowed(String taskId, String operation) throws SQLException {
String taskAllowedSql = "select"+operation+"from task_permissions where role_id = ? and task_id = ?";
PreparedStatement pstmt = null;
ResultSet rst = null;
boolean allowed = false;
Connection conn = <make db connection>
String role = <take role of user from session>
try {
pstmt = conn.prepareStatement(taskAllowedSql);
pstmt.setString(1, roleId);
pstmt.setString(2, taskId);
rst = pstmt.executeQuery();
if (rst.next()) {
allowed = rst.getString(1);
}
} catch (SQLException se) {
throw se;
} finally {
cleanUpDbConnection(pstmt, rst);
}
return allowed;
}
そしてjspでは、このチェックをさまざまなモジュールに追加できるため、レンダリングの前に上記の関数が呼び出され、この情報をこのロールユーザーに表示するかどうかを通知します
<s:if test="%{@<packagename>.TaskSecurityHandler@isTaskOpAllowed(task,operation)}">
EDIT: 逆に、タスクベースのアクセス許可の結果をキャッシュし、そのキャッシュにクエリを実行するたびにデータベースヒットを保存します。
プロパティなどRoleTaskPrmsBean.java
で を作成します
。システムまたはサーバーの起動時に、db task_permissions テーブルからすべてのレコードを取得し、このクラスの多くのオブジェクトを Map に対して配置します。上記の関数が実行されるたびに、db ではなくその Map に対してクエリを実行できます。String role;
String task;
String operation1;
String operation2;key:task+role