【发布时间】:2018-05-27 12:43:53
【问题描述】:
我正在使用 Java 框架 Vaadin 创建一个 Web 应用程序。此应用程序有不同的用户级别,当用户登录时,我会根据他们的权限级别更改菜单。我遇到的问题是通过输入 URI 来阻止用户访问他们不应该访问的页面。例如,如果用户登录到应用程序并且只有查看第一页的权限,他仍然可以通过在浏览器搜索栏中输入第二页的 URI 来访问第二页。
我正在研究阻止 URI 导航,但未能找到在 Vaadin 中是如何完成的。所以我的问题是如何防止 Vaadin 中的 URI 导航?如果您有其他方法来阻止用户访问他们不认为的页面,请随时发布。
到目前为止,我做得很短,我看到的一篇关于堆栈溢出的帖子并没有很好地解释它。
到目前为止,这是我的 NavigatorUI 类的样子:
@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
}
});
}
}
【问题讨论】:
-
您必须阻止 URL 在两个地方工作:在 UI 中和在处理 UI 的控制器中的服务器端。因此,如果不允许用户查看 URL,则页面会呈现错误消息。
-
你正在使用
Navigator? -
是的,使用导航器代码更新帖子
标签: java spring-security uri vaadin