防止URI导航

时间:2013-08-14 07:17:43

标签: java web-applications permissions uri vaadin

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

我正在考虑阻止URI导航,但未能成功找到如何在Vaadin中完成此操作。所以我的问题是如何防止Vaadin中的URI导航?如果你有一种阻止用户访问页面的不同方法,那么请不要随意发帖。

谢谢

3 个答案:

答案 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应用程序中的表现类似。