JFinalのブロッキング構成


プロジェクトを配置するとき、私たちは工事中の情報が一部の人にしか見られないことを望んでいます.許可されていない訪問者に対しては、相手のアクセスを選択的に拒否することを望んでいます.ここではブロックInterceptorを使用する必要があります.ブロッカーの役割はactionのリクエストをブロッキング処理し,指定された訪問者にウェブサイト情報を表示するとともに,許可されていないリクエストをブロックすることである.
JFinalでのブロッキングのブロッキング粒度は、以下のように分類され、ブロッキングの各レベルの実行順序も、Global、Inject、Class、Methodの順にソートされる.同じレベルに複数のブロッカーがある場合は、同じレベルで前の実行に設定します.
Before
ブロッキングの構成では、Class、Methodレベルのブロッキングを構成できるBefore注記を使用する必要があります.サンプルコードは次のとおりです.ここで、Beforeでは複数のブロッカーを構成することができ、カッコ内でカンマで区切るだけでよい.コードには例が示されている.
//Class      ,           
@Before(ClassInterceptorA.class)
public class InterControllerA extends Controller{

    //Method      ,      
    @Before({MethodInterceptorA.class,MethodInterceptorB.class})
    public void functionA(){
        //            ,      
        //ClassInterceptorA.class,MethodInterceptorA.class,MethodInterceptorB.class
    }

    //         
    public void functionB(){
        //      Method       ,   Class       
    }
}

対応するブロッキングでは、次のような構成が必要です.構成後のClassブロッキングでは、上記のクラスがブロックされます.
public class ClassInterceptorA implements Interceptor{
    public void intercept(Invocation inv){
        System.out.println("      ");
        inv.invoke();
        System.out.println("      ");
    }
}

ここでinv.invoke()はターゲットメソッドを呼び出す場所であり、ブロッカーは呼び出し前と呼び出し後にそれぞれ対応するコードを挿入することができる.
Beforeは、ブロッキングをClassとMethosレベルに設定できます.Globalレベルに設定する場合は、JFinalConfigクラスで構成する必要があります.これはJFinalConfigから継承されたサブクラスで、すべてのJFinalプロジェクトにはWebプロジェクト全体を構成するためのサブクラスがあります.このサブクラスでは、configInterceptor()というグローバルブロッカーの構成である複数の抽象メソッドを実装する必要があります.
public class MyJFinalConfig extends JFinalConfig {
   public void configInterceptor(Interceptors me) {
      //        
      me.add(new GlobalInterceptorA());
      me.add(new GlobalInterceptorB());
      me.add(new GlobalInterceptorC());
   }
}

Clear
Clearは、ブロッキングペアメソッドをクリアするためのブロッキングです.ブロックは上から下までGlobal、Inject、Class、Methodの4つの階層に分けられており、Clearは自分が置かれている階層以上のブロックをクリアするために使用できます.たとえば、Methodレイヤに宣言されたClearはGlobal、Inject、Classレイヤのブロックをクリアし、Classレイヤに宣言されたClearはGlobal、Injectレイヤのブロックをクリアします.
また、Clearがパラメータを持たない場合は、範囲内のすべてのブロッカーをクリアし、パラメータを持っている場合は、パラメータ指定のブロッカーをクリアします.
@Before(InterceptorA.class)
public class UserController extends Controller {
    @Clear
    @Before(InterceptorB.class)
    public void login() {
        //Global、 Class          ,        InterceptorB    
    }
    @Clear({InterceptorA.class, InterceptorC.class})//         AAA CCC
    @Before(InterceptorC.class)
    public void show() {
        //  Clear       InterceptorC,   Clear           
        //  InterceptorC     
    }
}