-1

こんにちは、struts2 アプリケーションにロールベースのセキュリティを適用しようとしていますが、機能するチュートリアルが見つかりませんでした。それらのほとんどは xml ファイルでユーザー名とパスワードを定義していますが、データベースにアクセスできるものを探しています。

私がしたいこと :

ユーザーがアクセスデータベースにログインしているときにログインページを作成して、ロールに基づいてアプリケーションのさまざまなリソースへのアクセスを承認および提供します。

4

1 に答える 1

1

このセキュリティには 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

于 2013-02-15T08:17:08.613 に答える