1

所以我能够让 Apache Shiro 在 Vaadin 上与 Guice 一起工作(感谢 ShiroWebModule)。Shiro 注释 ( @RequiresAuthentication, @RequiresPermission) 仅适用于主 Vaadin Application 类和自定义类内部。它们在 CustomComponent/Window 类中不起作用。

我尝试通过提供者将 Window 类注入到 Application 类中,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 的区别之一是 TestClass 实现了一个接口;Guice 可能会以不同的方式处理接口代理和“普通类”代理 - 我会尝试更改 TestClass 以扩展抽象类,然后看看那里会发生什么。

于 2012-04-16T06:57:51.567 回答