正在阻止URI导航



我正在使用java框架Vaadin创建一个web应用程序。这个应用程序有不同的用户级别,当用户登录时,我会根据他们的权限级别更改菜单。我遇到的问题是通过键入URI来阻止用户访问他们不应该访问的页面。例如,如果用户登录到应用程序,并且只有查看第一页的权限,那么他仍然可以通过在浏览器搜索栏中键入第二页的URI来访问第二页。

我曾试图阻止URI导航,但未能找到在Vaadin中是如何做到这一点的。所以我的问题是如何防止在Vaadin中进行URI导航?如果你有一种不同的方法来阻止用户访问页面,他们不应该随意发布。

感谢

如果您使用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,因为它是在Vaadin7之前开始的:我们开发了一个非常相似的框架,使用URIFragmentListener来做同样的事情。

我认为您可以使用vaadin导航器来完成此操作。它允许在视图中导航。因此,无论何时调用init(VaadinRequest request),都必须指向登录视图。其他时候,当按钮单击或任何其他组件事件转到其他视图时,您可以使用"导航器"在事件侦听器中导航相关视图。

我对Vaadin一无所知,但我读到你可以在那里使用MVC。如果您使用MVC,则必须在控制器中指定类似的内容。

public static Result view_contacts(String currentUser) {
        if (currentUser == "guest") {
            return GO_UNAUTHORIZED;
        }
            //code here
}

这是我在Java Play Framework应用程序中模拟的方法。

最新更新