1

そのため、Vaadin で Apache Shiro を Guice と連携させることができました (ShiroWebModule のおかげです)。Shiro アノテーション ( @RequiresAuthentication@RequiresPermission) は、メインの Vaadin Application クラスおよびカスタム クラス内でのみ機能します。CustomComponent/Window クラス内では機能しません。

プロバイダーを使用して Application クラスに Window クラスを挿入しようとしましたが、injector.getInstanceそれでも機能しません...

私は Guice と Shiro を初めて使用するので、何か不足している可能性がありますか?

他のカスタム クラスで機能するのはなぜですか? これは期待どおりに機能します (例外がスローされます)

public class TestClassImpl implements TestClass {

    @Override

    public void doSomeWork() {
        //this will throw an exception as expected
        test();
    }

    @RequiresAuthentication

    public void test() {

    }
}

これは期待どおりに動作しません (メソッドが実行され、Apache Shiro アノテーションは無視されます)。

  public class LoginView extends CustomComponent {

    public LoginWindow() {
        setCompositionRoot(mainLayout);
        //this will execture but it should not
        test();
    }

    @RequiresAuthentication

    public void test() {

    }
}
4

1 に答える 1

2

実行時にこのようなアノテーションを使用するには、通常 AOP が必要です。

Spring AOP では、 self への呼び出しをインターセプトできません。これは、Spring AOP がプロキシ クラスを生成し、それらのプロキシでインターセプトが発生するためです -> self への呼び出しをインターセプトできません。

Guice AOP も同じように機能すると思います。

注意: TestClass/Impl と LoginView の違いの 1 つは、TestClass がインターフェイスを実装することです。Guice がインターフェイス プロキシと「通常のクラス」プロキシを異なる方法で処理する場合があります。TestClass を変更して抽象クラスを拡張し、そこで何が起こるかを確認します。

于 2012-04-16T06:57:51.567 に答える