Javaの認可と認証

炎欲天舞
リリース: 2017-08-04 10:57:56
オリジナル
2013 人が閲覧しました

CRM権限管理

1. 概念

権限管理は、リソースに対するユーザーの操作を管理することです。この CRM システムの権限 (リソースとも呼ばれます) は、ロール操作権限、つまり RBAC (Role-Based Access Control、ロールベースのアクセス制御) に基づいて実装されます。これは、ユーザーがロールを通じて権限に関連付けられることを意味します。簡単に言うと、ユーザーには複数の役割があり、各役割には複数の権限があります。このようにして、「ユーザー-ロール-権限」認可モデルが構築されます。このモデルでは、ユーザーとロールの間、およびロールと権限の間に多対多の関係があり、テーブル間の多対多の関係を実現するには、多対多の関係を 2 つに分割する必要があります。対多の関係。したがって、中間テーブル、ユーザー ロール テーブル、およびロール権限テーブルが導入されます。

2. データベース

権限管理モジュールには、合計5つのテーブル:

  1. 3つのメインテーブル

a) ユーザーテーブル(t_user)、

b )役割テーブル ( t_role)、

现 III. 永続管理 実績权

1、モジュール、キャラクター、ユーザーの単一テーブル CRUD

モジュール CRUD: T_MODULE テーブルを操作

文字 CRUD: t_role テーブルを操作

ユーザー CRUD: 操作: 操作 t_role テーブル

2. 認可

ロールに権限を付与

権限を付与役割:Ztreeを使用して、このモジュールをバインドしますmodule (親モジュールに他のサブモジュールに関連付けられた単語の役割があるかどうかを判断し、ない場合はキャンセルし、存在する場合は関連付けます)

a) jQuery プラグイン zTree を使用してリソースのツリー構造を構築します。ツリーの内容は、テーブル t_module の

です

データ

b) マウスを使用して zTree の選択ボックスをクリックして、

テーブル t_permission (ロール リソース)表) ロールへの権限の付与を実装する

ユーザーがロールを割り当てる

ユーザーにロールを与える: ComboBox の複数の選択肢を使用する

A) アカウント番号を t_user_role に直接追加する

b) を変更します。アカウント: まず削除してから追加します

🎜 🎜

ユーザーの作成またはユーザー情報の変更時に、コンボボックス複数選択ボックスを使用して、ユーザーにロール操作を割り当てることができますt_user_role (ユーザーロールテーブル)

3 . 認証

のアイデア :

t_permission テーブルからアクセス許可の値 (acl_value) を取得し、ページによって渡された値、またはアノテーションで指定されたアクセス許可の値と比較します。

1.ページは Request.getParameter("permission") を渡します ; userId に基づいてデータベースにクエリして見つかった権限リストを比較します

2. アノテーションを通じてモジュールの権限値を明確にします: @requirePermission(permission="1010";

バックエンド認証: Spring AOPとカスタムアノテーションは認証を実装します

ユーザーの取得 パーミッションはセッションに保存され、ユーザーがリソースを操作するときにリソースパーミッション値が送信され、ユーザーがこのパーミッションを持っているかどうかが判断されます。 Spring AOPをインターセプト認証に使用します。 。 -終了ページ判定

4. バックグラウンド権限検証

5. リターン

カスタムアノテーション

面 2. 切断面の記述

エントリポイントの定義 ポイント: 権限を持つメソッドの自己インターセプト改善することもできますパフォーマンス

//@Pointcut("execution(* com.shsxt.controller.*.*(..))")
    @Pointcut("@annotation(com.shsxt.annotation.RequirePermissions)")    
    public void pointcut() {
    }
ログイン後にコピー

を使用してフロント デスク経由で Permission パラメータを渡します:

List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(",")));
       String permissioFront = request.getParameter("permission"); // 后台权限认证
       AssertUtil.isTrue(!permissions.contains(permissioFront), "您无权操作此模块");
ログイン後にコピー

アノテーション経由

Rrieee

3. AOP AOP ネームスペースの導入と AOP アノテーション ドライバーを有効にします

List<String> permissions = permissionService.findRolePermissions(roleIds.substring(0, roleIds.lastIndexOf(",")));     
  
    if (requirePermissions != null) {

        String permission = requirePermissions.permission(); // 后台权限认证

        throw new UnAuthPermissionException(permission, "您无权操作此模块");

    }
ログイン後にコピー
4. 必要なメソッドでアノテーションを有効にしますパーミッション認証

パーミッションはモジュールテーブルのact_valueと一致する必要があります

🎜 フロントエンド認証: Freemark組み込み関数の決定🎜🎜 ユーザーパーミッションを取得した後、フロントエンドでfreemark構文を使用しますユーザーがこのリソースを操作できるかどうかを判断するための freemarker (list?seq_contains('permission value'))🎜🎜1.SQL:🎜
<!-- 启用@Aspect注解 -->

<aop:aspectj-autoproxy />
ログイン後にコピー
🎜2. AOP アスペクト クラスで権限をクエリし、権限値のリストを取り出して配置します。それをセッションに追加します🎜🎜🎜🎜🎜3. フロントエンドページの判断: 説明: シーケンスにパラメーター値が含まれているかどうかを判断するには、freemark 組み込み関数 sql_contains を使用します。これには、コレクション hashmap.contains( と同様に true🎜🎜 を返すことも含まれます) Java) 値);🎜🎜🎜🎜

以上がJavaの認可と認証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート