所以我能够让Vairo在Vaadin上使用Guice(感谢ShiroWebModule)。
Shiro注释(@RequiresAuthentication
,@RequiresPermission
)仅适用于主要的Vaadin Application类和自定义类。它们在CustomComponent / Window类中不起作用。
我尝试使用提供程序通过injector.getInstance
将Window类注入到Application类中,但仍然无效...
我是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() {
}
}
答案 0 :(得分:2)
在运行时使用这样的注释通常涉及AOP。
使用Spring AOP,你不能拦截对self的调用:这是因为Spring AOP生成代理类,并且拦截发生在那些代理上 - >它不能拦截对自己的呼唤。
我怀疑Guice AOP以同样的方式运作。
注意:TestClass / Impl和LoginView之间的区别之一是TestClass实现了一个接口; Guice可能会以不同的方式处理接口代理和“普通类”代理 - 我会尝试更改TestClass来扩展抽象类,看看那里会发生什么。