防止在 vaadin 中进行 URI 导航
Preventing URI Navigation in vaadin
我正在使用 java 框架 Vaadin 创建 Web 应用程序。这个应用程序有不同的用户级别,当用户登录时,我根据他们的权限级别更改菜单。我遇到的问题是阻止用户通过键入 URI 访问他们不应该访问的页面。例如,如果用户登录到应用程序并且只有查看第一页的权限,他仍然可以通过在浏览器搜索栏中输入第二页的 URI 来访问第二页。
我一直在研究如何阻止 URI 导航,但未能成功找到 Vaadin 中的实现方式。所以我的问题是如何防止 Vaadin 中的 URI 导航?如果您有不同的方法来阻止用户访问他们不应该访问的页面,请随意 post。
到目前为止,我说得很短,我在堆栈溢出上看到的 post 并没有很好地解释它。
到目前为止,这是我的 NavigatorUI class 的样子:
@SpringUI
public class NavigatorUI extends UI {
public Navigator navigator;
public static final String LOGIN = "";
public static final String MAINPAGE = "main";
public static final String EMPLOYEEPAGE = "employeepage";
public static final String REGISTERPAGE = "registerpage";
public static final String ADDEMPLOYEEPAGE = "addemployeepage";
public static final String ADDEMPLOYERPAGE = "addemployerpage";
private MainSystem main = new MainSystem();
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
Navigator.ComponentContainerViewDisplay viewDisplay = new Navigator.ComponentContainerViewDisplay(layout);
navigator = new Navigator(UI.getCurrent(), viewDisplay);
navigator.addView(LOGIN, new LoginView());
navigator.addView(MAINPAGE, new MainView());
navigator.addView(EMPLOYEEPAGE, new EmployeeView());
navigator.addView(REGISTERPAGE, new RegisterView());
navigator.addView(ADDEMPLOYEEPAGE, new AddEmployeeView());
navigator.addView(ADDEMPLOYERPAGE, new AddEmployerView());
navigator.addViewChangeListener(new ViewChangeListener() {
@Override
public boolean beforeViewChange(ViewChangeEvent event) {
View newView = event.getNewView();
String newViewString= newView.toString();
newViewString = newViewString.substring(0,newViewString.length()-9);
View loginView = new LoginView();
String loginViewString = loginView.toString();
loginViewString = loginViewString.substring(0,loginViewString.length()-9);
boolean result = true;
if (newViewString.equals(loginViewString)){
return result;
}
else if (VaadinSession.getCurrent().getAttribute("role").toString().equals("Admin")||VaadinSession.getCurrent().getAttribute("role").toString().equals("Employee")){
return result;
}
else {
result = false;
}
return result;
}
@Override
public void afterViewChange(ViewChangeEvent event) {
//NO-OP
}
});
}
}
您将 ViewchangeListener
添加到 Navigator
实例,这会阻止在 beforeViewChange
中导航。
If any listener returns false, the view change is not allowed and afterViewChange() methods are not called.
因此,您通过检查当前用户对事件 newView
的授权来实现该接口。如果你想阻止它,你 return false
在那里。
我正在使用 java 框架 Vaadin 创建 Web 应用程序。这个应用程序有不同的用户级别,当用户登录时,我根据他们的权限级别更改菜单。我遇到的问题是阻止用户通过键入 URI 访问他们不应该访问的页面。例如,如果用户登录到应用程序并且只有查看第一页的权限,他仍然可以通过在浏览器搜索栏中输入第二页的 URI 来访问第二页。
我一直在研究如何阻止 URI 导航,但未能成功找到 Vaadin 中的实现方式。所以我的问题是如何防止 Vaadin 中的 URI 导航?如果您有不同的方法来阻止用户访问他们不应该访问的页面,请随意 post。
到目前为止,我说得很短,我在堆栈溢出上看到的 post 并没有很好地解释它。
到目前为止,这是我的 NavigatorUI class 的样子:
@SpringUI
public class NavigatorUI extends UI {
public Navigator navigator;
public static final String LOGIN = "";
public static final String MAINPAGE = "main";
public static final String EMPLOYEEPAGE = "employeepage";
public static final String REGISTERPAGE = "registerpage";
public static final String ADDEMPLOYEEPAGE = "addemployeepage";
public static final String ADDEMPLOYERPAGE = "addemployerpage";
private MainSystem main = new MainSystem();
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
Navigator.ComponentContainerViewDisplay viewDisplay = new Navigator.ComponentContainerViewDisplay(layout);
navigator = new Navigator(UI.getCurrent(), viewDisplay);
navigator.addView(LOGIN, new LoginView());
navigator.addView(MAINPAGE, new MainView());
navigator.addView(EMPLOYEEPAGE, new EmployeeView());
navigator.addView(REGISTERPAGE, new RegisterView());
navigator.addView(ADDEMPLOYEEPAGE, new AddEmployeeView());
navigator.addView(ADDEMPLOYERPAGE, new AddEmployerView());
navigator.addViewChangeListener(new ViewChangeListener() {
@Override
public boolean beforeViewChange(ViewChangeEvent event) {
View newView = event.getNewView();
String newViewString= newView.toString();
newViewString = newViewString.substring(0,newViewString.length()-9);
View loginView = new LoginView();
String loginViewString = loginView.toString();
loginViewString = loginViewString.substring(0,loginViewString.length()-9);
boolean result = true;
if (newViewString.equals(loginViewString)){
return result;
}
else if (VaadinSession.getCurrent().getAttribute("role").toString().equals("Admin")||VaadinSession.getCurrent().getAttribute("role").toString().equals("Employee")){
return result;
}
else {
result = false;
}
return result;
}
@Override
public void afterViewChange(ViewChangeEvent event) {
//NO-OP
}
});
}
}
您将 ViewchangeListener
添加到 Navigator
实例,这会阻止在 beforeViewChange
中导航。
If any listener returns false, the view change is not allowed and afterViewChange() methods are not called.
因此,您通过检查当前用户对事件 newView
的授权来实现该接口。如果你想阻止它,你 return false
在那里。