Java 防止URI导航

Java 防止URI导航,java,web-applications,permissions,uri,vaadin,Java,Web Applications,Permissions,Uri,Vaadin,我正在使用java框架Vaadin创建一个web应用程序。此应用程序有不同的用户级别,当用户登录时,我会根据他们的权限级别更改菜单。我遇到的问题是,通过键入URI,阻止用户访问他们不希望访问的页面。例如,如果用户登录到应用程序,并且只有查看第一页的权限,那么他仍然可以通过在浏览器搜索栏中键入第二页的URI来访问第二页 我曾试图阻止URI导航,但未能找到在Vaadin中是如何做到这一点的。所以我的问题是如何防止Vaadin中的URI导航?如果你有一种不同的方法阻止用户访问页面,他们也不会随意发布

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

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


谢谢你

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

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

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

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

public static Result view_contacts(String currentUser) {
        if (currentUser == "guest") {
            return GO_UNAUTHORIZED;
        }
            //code here
}
这与我在Java Play Framework应用程序中的操作方式类似。

如果您使用to do 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来做同样的事情。

如果您使用to do 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来做同样的事情。

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

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

我认为这个答案很好,查尔斯几乎正确地回答了我关于瓦丁的所有问题。这是我的+1当我添加ViewChangeListener时,它似乎会干扰我的登录页面。我把监听器添加到我的UI页面,它不再带我进入登录页面。我认为这个答案很好,Charles几乎正确地回答了我关于vaadin的所有问题。这是我的+1当我添加ViewChangeListener时,它似乎会干扰我的登录页面。我将侦听器添加到我的UI页面,它不再带我进入登录页面