1

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

我正在研究阻止 URI 导航,但未能找到在 Vaadin 中是如何完成的。所以我的问题是如何防止 Vaadin 中的 URI 导航?如果您有不同的方法来阻止用户访问他们不应该的页面,请随时发布。

谢谢

4

3 回答 3

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 来做同样的事情。

于 2013-08-14T07:52:27.277 回答
1

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

于 2013-08-14T07:56:35.510 回答
0

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

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

这与我在 Java Play Framework 应用程序中的操作方式类似。

于 2013-08-14T07:22:00.480 回答