我正在为我的应用程序开发历史管理。我有两个视图,一个是登录,另一个是主应用程序。我添加了本地链接#login和#application。理想情况下,当用户打开应用程序时,他应该看到具有#login令牌的登录视图。它工作正常。然后,当他的凭据被验证时,他会使用令牌#application进入应用程序视图。当他退出时,他会回到#login。这一切都很好。但令我困扰的是,当我手动将#login中的链接令牌更改为#application时,即使我已经注销,主应用程序也会直接打开。但是当我在新选项卡中尝试相同的操作时,它可以正常工作。 该应用程序容易受到需要修复的攻击。 我需要一些帮助。
//When application loads
History.newItem("application",true);
//When login screen loads //
History.newItem("login",true);
//On change
History.addValueChangeHandler(new ValueChangeHandler<String>(){
@Override
public void onValueChange(ValueChangeEvent<String> event) {
String historyToken = event.getValue();
if (historyToken.substring(0, 5).equals("login")) {
login();
}
if (historyToken.substring(0, 11).equals("application")) {
mainApplicationView();
}
});
当我注销时,会调用login()方法,该方法将相关面板加载到RootPanel中,并且内部也有#login标记。此外,主应用程序面板将从rootpanel中删除。
答案 0 :(得分:0)
错误在第二个条件下:
History.addValueChangeHandler(new ValueChangeHandler<String>(){
@Override
public void onValueChange(ValueChangeEvent<String> event) {
String historyToken = event.getValue();
if (historyToken.substring(0, 5).equals("login")) {
login();
}
if (historyToken.substring(0, 11).equals("application")) {
startApplication(); //it will again check if the session is valid. If not, login screen will show up. Else mainApplication.
}
});
我退出后,它不应该允许我在任何情况下看到应用程序页面。所以,我应该确保sessionID有效。我只在应用程序启动时执行了一次,但没有在History.addChangeHandler下执行。这是一个大错。
String sessionID = Cookies.getCookie("JSESSIONID");
if(sessionID == null) {
login();
} else {
checkWithServer();
}