Apache ShiroがVaadinのGuice(ShiroWebModuleのおかげで)と働くことができました。 Shiro注釈(@RequiresAuthentication
,@RequiresPermission
)は、主なVaadin Applicationクラスとカスタムクラス内でのみ機能します。 CustomComponent/Windowクラス内では動作しません。Apache Shiro + Guice - 注釈を受け取ることができません
私はGuiceのと士郎に新しいですので、多分私は何かが欠けています
...私はinjector.getInstance
を通じて、プロバイダとApplicationクラスにウィンドウクラスを注入しようと、それはまだ動作しませんか?
他のカスタムクラスではなぜ機能しますか?予想されるように、これは予想通りこれは(Apacheの史郎アノテーションは無視され、メソッドが実行される)は動作しません
public class TestClassImpl implements TestClass {
@Override
public void doSomeWork() {
//this will throw an exception as expected
test();
}
@RequiresAuthentication
public void test() {
}
}
(例外がスローされます)作品:
public class LoginView extends CustomComponent {
public LoginWindow() {
setCompositionRoot(mainLayout);
//this will execture but it should not
test();
}
@RequiresAuthentication
public void test() {
}
}
ご返信ありがとうございます。しかし、TestClassImplはインターフェースなしで直接注入されたとしても動作します。したがって、例外はスローされません(ただし、 'injector.getInstance(LoginView.class);)、これは期待どおりに動作します(セキュリティ例外をスローします)\t' injector.getInstance(TestClassImpl.class); '。どちらも@RequiresAuthentificationで注釈が付けられたコンストラクタ内のメソッドを呼び出します。 –
ここでは、より根本的な問題があります。 GuiceはCustomComponents内にクラスを挿入しません。どうしてか分かりません。それは間違いなく動作するはずですが、私は何か間違っています。 –
更新。私はこの問題の回避策を持っています。コンポーザーインジェクションのみがComponents/Windowsで動作します(理由はわかりません)。だから、私は必要なサービスクラスを注入し、これらはShiroの注釈を内部に持っています。私は、Vaadinコンポーネント/ウィンドウクラス内のShiroロール/パーミッションをプログラムでチェックするだけで済みます。 –