GWT-управление историей для веб-приложения

Я работаю над управлением историей для своего приложения. У меня есть два представления, одно для входа в систему, а другое для основного приложения. Я добавил локальные ссылки #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 удалены основные панели приложений.


person Vaibhav Shukla    schedule 31.08.2015    source источник
comment
History.newItem (приложение, правда); //Когда приложение загружает History.newItem(login,true); //При загрузке экрана входа // History.addValueChangeHandler(new ValueChangeHandler‹String›() { @Override public void onValueChange(ValueChangeEvent‹String› event) { String historyToken = event.getValue(); try { if (historyToken.substring( 0, 5).equals(login)) { RootPanel.get(timeList).remove(mainPanel); login(); } Это соответствующие фрагменты кода.   -  person Vaibhav Shukla    schedule 31.08.2015
comment
Когда я выхожу из системы, я вызываю функцию login(), в которую добавляются и удаляются соответствующие панели. login() также содержит токен #login.   -  person Vaibhav Shukla    schedule 31.08.2015
comment
Я нашел ошибку. Спасибо :)   -  person Vaibhav Shukla    schedule 31.08.2015


Ответы (1)


Ошибка была внутри второго условия if:

    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.
                }
    });

После того, как я выйду из системы, он в любом случае не должен позволять мне видеть страницу приложения. Итак, я должен убедиться, что идентификатор сеанса действителен. Я сделал это только один раз при запуске приложения, но не в History.addChangeHandler. Это была ошибка.

    String sessionID = Cookies.getCookie("JSESSIONID");
    if(sessionID == null) {
        login();
    } else {
        checkWithServer();
    }
person Vaibhav Shukla    schedule 31.08.2015