2013-11-27 4 views
0

Я добавил управление сеансами Shiro (на основе Kim's and Leif's webinar) в демонстрационное приложение для демонстрации быстродействующих билетов Vaadin. Когда я делаю перезагрузку браузера в приложении, я возвращаюсь на страницу входа без сеанса. Как/где я могу это предотвратить.Shiro/Vaadin теряет сеанс при перезагрузке страницы

У меня стандартный shiro.ini программы настройки

кнопки Войти обработчик:

 signin.addClickListener(new ClickListener() { 
     @Override 
     public void buttonClick(ClickEvent event) { 
      boolean loginOK = false; 

      Factory<SecurityManager> factory = 
        new IniSecurityManagerFactory("classpath:shiro.ini"); 
      SecurityManager securityManager = factory.getInstance(); 
      SecurityUtils.setSecurityManager((org.apache.shiro.mgt.SecurityManager) 
                  securityManager); 

      Subject currentUser = SecurityUtils.getSubject(); 

      //collect user principals and credentials in a gui specific manner 
      //such as username/password html form, X509 certificate, OpenID, etc. 
      //We'll use the username/password example here since it is the most common. 
      UsernamePasswordToken token = 
        new UsernamePasswordToken(username.getValue(), password.getValue()); 

      //this is all you have to do to support 'remember me' (no config - built in!): 
      token.setRememberMe(true); 

      //currentUser.login(token); 
      try { 
       logger.log(Level.INFO, "trying login"); 
       currentUser.login(token); 
       logger.log(Level.INFO, "login done"); 

        //if no exception, that's it, we're done! 
      } catch (Exception e) { 
       logger.log(Level.INFO, "exception"); 
      } 

      if (currentUser.hasRole("schwartz")) { 
       loginOK = true; 
      } else { 
       loginOK = false; 
      } 

      if (loginOK) { 
       signin.removeShortcutListener(enter); 
       buildMainView(); 
      } else { 
       if (loginPanel.getComponentCount() > 2) { 
        // Remove the previous error message 
        loginPanel.removeComponent(loginPanel.getComponent(2)); 
       } 
       // Add new error message 
       Label error = new Label(
         "Wrong username or password. <span>Hint: try empty values</span>", 
         ContentMode.HTML); 
       error.addStyleName("error"); 
       error.setSizeUndefined(); 
       error.addStyleName("light"); 
       // Add animation 
       error.addStyleName("v-animate-reveal"); 
       loginPanel.addComponent(error); 
       username.focus(); 
      } 
     } 
    }); 

ответ

0

Использования @preserveonRefresh аннотация в UI классе инициализации

0

Я рекомендую использовать веб-фильтр Сиро. Таким образом, ваш сеанс не будет потерян, и вы можете легко запретить несанкционированные действия (например, создавать объекты объектов), поскольку контекст Shiro уже настроен при отображении входа или любого другого представления.

Смежные вопросы