在 Spring 和 Vaadin 中使用 ViewAccessControl
Using ViewAccessControl in Spring and Vaadin
我目前正在尝试使用 vaadin.spring 的 ViewAccessControl 接口,如 this 教程的最后一段中所述。
但是在执行 isAccessGranted 方法时出现以下错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'frontPageView': Scope 'vaadin-view' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No active view
FrontPageView的声明class(我在enter方法中唯一做的就是添加一些vaadin ui元素):
@SpringView(name = FrontPageView.NAME)
public class FrontPageView extends DashboardDesign implements View, ViewAccessControl {
@Override
public void enter(ViewChangeEvent event) {
}
}
以及我对 isAccessGranted 方法的实现:
@Override
public boolean isAccessGranted(UI ui, String beanName) {
return SecurityContextHolder.getContext().getAuthentication().isAuthenticated();
}
P.S。这个人一年前遇到的问题基本上是一样的:How to create a secure view with Vaadin and SpringViewProvider
好的,我现在明白了。如果其他人发现此问题,解决方案是使用 ViewInstanceAccessControl 接口而不是 ViewAccessControl iterface。这样一切都很好。
我目前正在尝试使用 vaadin.spring 的 ViewAccessControl 接口,如 this 教程的最后一段中所述。
但是在执行 isAccessGranted 方法时出现以下错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'frontPageView': Scope 'vaadin-view' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No active view
FrontPageView的声明class(我在enter方法中唯一做的就是添加一些vaadin ui元素):
@SpringView(name = FrontPageView.NAME)
public class FrontPageView extends DashboardDesign implements View, ViewAccessControl {
@Override
public void enter(ViewChangeEvent event) {
}
}
以及我对 isAccessGranted 方法的实现:
@Override
public boolean isAccessGranted(UI ui, String beanName) {
return SecurityContextHolder.getContext().getAuthentication().isAuthenticated();
}
P.S。这个人一年前遇到的问题基本上是一样的:How to create a secure view with Vaadin and SpringViewProvider
好的,我现在明白了。如果其他人发现此问题,解决方案是使用 ViewInstanceAccessControl 接口而不是 ViewAccessControl iterface。这样一切都很好。