SpringAOP01は、検証を実装するために、認証サービスのアクセス許可を使用する許可をAOPの実装検証機関を使用します

1つのプログラミングパラダイム

  1.1プロセス指向

  1.2オブジェクト指向

  1.3アスペクト指向プログラミング

  1.4関数型プログラミング

  1.5イベント駆動型プログラミング

 

2アスペクト指向プログラミングとは何ですか

  2.1はプログラミングパラダイムではなく、プログラミング言語であります

  いくつかの特定の問題を解決するための2.2

  によるオブジェクト指向プログラミングとして2.3

 

3 AOPは、元の意図を生成しました

  3.1コードの再現性は、問題を解決するあなた自身を繰り返してはいけません

  懸念の3.2分離は懸念の問題分離に対処します

    3.2.1水平分離(技術部門)

      制御層 - >レイヤサービス - >永続化層

    3.2.2垂直分離(モジュール部門)

      モジュール部門

    分離セクション3.2.3(機能的に分割)

      分離機能要件と非機能要件

 

AOPを使用しての4つの利点

  4.1ロジックをクロスカット、関心の特定のポイントに焦点を当てます

  4.2簡単に削除、追加することができ、懸念

  侵入4.3コードの可読性と保守性を向上させる、軽減

  

5つのAOP使用シナリオ

  5.1アクセス制御

  キャッシュ制御5.2

  5.3トランザクション制御

  5.4監査ログ

  5.5パフォーマンスの監視

  5.6分散型トラック

  5.7例外処理

  

6伝統的な方法を使用して能力の検証を実現

  6.1プロジェクトspringBootを作成します

    ダウンロード:Go]をクリックしてください

  6.2製品のエンティティクラスを作成します。

  Product.java

  新しいクラスを作成するために、6.3アナログ許可

    このクラスは、主にユーザーを設定し、ユーザーを取得するために使用されます

コードをコピー
用cn.test.demo.base_demo.security Package変更; 

/ ** 
 * @author王ヤン元帥
 * @Create 2018年4月29日17:15 
 *は、ユーザーがユーザーとアクセスの種類を設定することができ、ユーザがログインをシミュレート@desc 
 ** / 
{クラスCurrentSetHolder公共
    民間最終静的にThreadLocal <文字列> =新しい新しいホルダーにThreadLocal <>(); 

    / ** 
     *ユーザー取得
     * @return 
     * / 
    パブリック静的GET文字列は、(){ 
        == nullの「不明)(holder.getを返しますか? 「:holder.get(); 
    } 

    / ** 
     *ユーザ設定
     * @paramユーザー
     * / 
    パブリック静的ボイド集合(文字列ユーザ){ 
        holder.set(ユーザ); 
    } 
}
コードをコピー

  6.4新しいクラスチェックの権限を作成します。

    このクラスは、主に現在のユーザーは、「管理者」のユーザーであるかどうかを決定するために使用されます

コードをコピー
cn.test.demo.base_demo.serviceパッケージペナルティのため、

インポートcn.test.demo.base_demo.security.CurrentSetHolder; 
インポートorg.springframework.stereotype.Component; 

/ ** 
 * @author王ヤン元帥
 *の@Create 2018年4月29日17:19 
 *サービスクラスをチェックする@desc許可
 ** / 
@Component 
パブリッククラスのAuthService { 

    / ** 
     *ユーザーは、「管理者」でないかどうかを確認するための許可はエラーになります
     * / 
    公共のボイドのcheckAccessを(){ 
        文字列=ユーザーをCurrentSetHolder.get (); 
        IF {(! "ADMIN" .equals(ユーザー))
            スロー新しい新しいのRuntimeException( "NOT演算を可能にします。"); 
        } 
    } 
}
コードをコピー

  6.5新しいクラスProductService

    これは、潜在的に製品にいくつかの操作を実現しています

  ProductService.java

  サービス層のテストクラスを作成するには、6.6

    ProductServiceのinsertメソッドを呼び出す前に設定したユーザー

  ProductServiceTest.java

 

AOPの実装検証を使用するための7の許可

  7.1新しいプロジェクトを作成しますspringBoot

    ダウンロード:Go]をクリックしてください

  7.2製品のエンティティクラスを作成します

コードをコピー
パッケージcn.test.demo.base_demo.entity。

/ ** 
 * @author王杨帅
 * @Create 2018年4月29日17時11 
 * @desc商品实体类
 ** / 
publicクラスの製品{ 
    プライベート整数ID。
    プライベート文字列名; 

    パブリック製品(){ 
    } 

    公共製品(整数ID、文字列名){ 
        this.id = ID。
        this.name =名前; 
    } 

    パブリック整数のgetId(){ 
        IDを返します。
    } 

    公共ボイドSETID(整数ID){ 
        this.id = ID。
    } 

    パブリック文字列のgetName(){ 
        戻り名。
    } 

    公共ボイドのsetName(文字列名){ 
        this.name =名。
    }

    @Override 
    パブリック文字列のtoString(){ 
        戻り"商品{" + 
                "ID =" + ID + 
                "NAME = '" +名+ '\'' + 
                '}'。
    } 
}
コードをコピー

  7.3 AdminOnlyコメントを作成します

コードをコピー
パッケージcn.test.demo.base_demo.security。

輸入java.lang.annotation.ElementType。
輸入java.lang.annotation.Retention。
輸入java.lang.annotation.RetentionPolicy。
輸入java.lang.annotation.Target; 

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
パブリック@interface AdminOnly { 
}
コードをコピー

  7.4特権のシミュレータを作成します。

    このクラスは、主にユーザーを設定し、ユーザーを取得するために使用されます

コードをコピー
用cn.test.demo.base_demo.security Package変更; 

/ ** 
 * @author王ヤン元帥
 * @Create 2018年4月29日17:15 
 *は、ユーザーがユーザーとアクセスの種類を設定することができ、ユーザがログインをシミュレート@desc 
 ** / 
{クラスCurrentSetHolder公共
    民間最終静的にThreadLocal <文字列> =新しい新しいホルダーにThreadLocal <>(); 

    / ** 
     *ユーザー取得
     * @return 
     * / 
    パブリック静的GET文字列は、(){ 
        == nullの「不明)(holder.getを返しますか? 「:holder.get(); 
    } 

    / ** 
     *ユーザ設定
     * @paramユーザー
     * / 
    パブリック静的ボイド集合(文字列ユーザ){ 
        holder.set(ユーザ); 
    } 
}
コードをコピー

  7.5クラスセクションを作成します

    このクラスは、主に使用されているすべてのアノテーション付きメソッドをチェックするための許可のためである@AdminOnly

コードをコピー
パッケージcn.test.demo.base_demo.security。

輸入cn.test.demo.base_demo.service.AuthService; 
輸入org.aspectj.lang.annotation.Aspect; 
輸入org.aspectj.lang.annotation.Before; 
輸入org.aspectj.lang.annotation.Pointcut; 
輸入org.springframework.beans.factory.annotation.Autowired; 
輸入org.springframework.stereotype.Component。

/ ** 
 * @author王杨帅
 * @Create 2018年4月29日夜05時37 
 * @desc权限检查的AOP类
 ** / 
@Aspect 
@Component 
パブリッククラスSecurityAspect { 
    @Autowired 
    のAuthServiceのAuthService。

    @Pointcut( "@アノテーション(AdminOnly)")
    公共ボイドadminOnly(){ 

    }

    @Before( "adminOnly()")
    公共ボイド検査(){ 
        authService.checkAccess()。
    } 
}
コードをコピー

  7.6サービスクラスProductServiceを作成します。

    @AdminOnlyノートを持つクラスのメソッドを削除し、その方法は、権限がチェックし、削除します

  ProductService.java

  7.7テストクラスを作成します。

    productService.delete(ID)の方法ではない「管理者」ユーザー・エラーが実装される場合、検証する権限を持っている] [AOPを使用

  ProductServiceTest.java

  7.8ソースコード

    に行くためにクリックしてください

おすすめ

転載: www.cnblogs.com/zhangyu317/p/11183701.html