Apache Shiro + Guice - 无法获得注释

时间:2012-04-15 21:29:24

标签: apache guice vaadin shiro

所以我能够让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() {

    }
}

1 个答案:

答案 0 :(得分:2)

在运行时使用这样的注释通常涉及AOP。

使用Spring AOP,你不能拦截对self的调用:这是因为Spring AOP生成代理类,并且拦截发生在那些代理上 - >它不能拦截对自己的呼唤。

我怀疑Guice AOP以同样的方式运作。

注意:TestClass / Impl和LoginView之间的区别之一是TestClass实现了一个接口; Guice可能会以不同的方式处理接口代理和“普通类”代理 - 我会尝试更改TestClass来扩展抽象类,看看那里会发生什么。