Така успях да накарам Apache Shiro да работи с Guice (благодарение на ShiroWebModule) на Vaadin. Анотациите на Shiro (@RequiresAuthentication
, @RequiresPermission
) работят само в основния клас на приложението Vaadin и в персонализираните класове. Те не работят в класове 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() {
}
}