我正在使用java框架Vaadin来创建一个Web应用程序。此应用程序具有不同的用户级别,当用户登录时,我根据其权限级别更改菜单。我遇到的问题是阻止用户通过输入URI来访问他们不认为的页面。例如,如果用户登录到应用程序并且只有查看第一页的权限,他仍然可以通过在浏览器搜索栏中键入第二页的URI来访问第二页。
我正在考虑阻止URI导航,但未能成功找到如何在Vaadin中完成此操作。所以我的问题是如何防止Vaadin中的URI导航?如果你有一种阻止用户访问页面的不同方法,那么请不要随意发帖。
谢谢
答案 0 :(得分:5)
如果您使用Vaadin 7 Navigator进行URI导航,则可以注册为ViewChangeListener:如果在beforeViewChange方法中返回“false”,则可以停止导航到新视图(并显示错误消息)如果你愿意的话。)
例如,
navigator.addViewChangeListener(new ViewChangeListener() {
@Override
public boolean beforeViewChange(ViewChangeEvent event) {
View newView = event.getNewView();
String newViewName = event.getViewName();
return canUserAccessView(newView, newViewName);
}
@Override
public void afterViewChange(ViewChangeEvent event) {
//NO-OP
}
});
我的主项目不使用Navigator,因为它是在Vaadin 7之前启动的:我们开发了一个非常相似的框架,它使用URIFragmentListener来做同样的事情。
答案 1 :(得分:1)
我认为你可以使用vaadin Navigator 来实现。它允许浏览视图。因此,只要调用init(VaadinRequest request)
,就必须直接进入登录视图。其他时候,当按钮单击或任何其他组件事件转到其他视图时,您可以使用Navigator导航事件侦听器中的相关视图。
答案 2 :(得分:0)
我对Vaadin一无所知,但我读到你可以在那里使用MVC。如果您使用的是MVC,则必须在控制器中指定类似的内容。
public static Result view_contacts(String currentUser) {
if (currentUser == "guest") {
return GO_UNAUTHORIZED;
}
//code here
}
这与我在Java Play Framework应用程序中的表现类似。