Как я могу проверить, все ли пользователи вошли в мое приложение - PullRequest
1 голос
/ 04 января 2011

У меня есть веб-приложение, которое использует имя пользователя и пароль для входа в систему.

Теперь, как я могу проверить в определенное время, когда все пользователи вошли в систему в это самое время.я использую управление сессиями, и в приложении не используется БД, все находится в файловой системе

Редактировать: еще 1 глупое сомнение .. как определить переменную с областью применения приложения ... это что-то в этом роде?

<env-entry>
<env-entry-name>test/MyEnv2</env-entry-name>
<env-entry-type>java.lang.Boolean</env-entry-type>
<env-entry-value>true</env-entry-value>
</env-entry>

Ответы [ 3 ]

4 голосов
/ 04 января 2011

Просто соберите всех зарегистрированных пользователей в Set в области приложения.Если ваше приложение хорошо разработано, у вас должен быть javabean User, который представляет вошедшего в систему пользователя.Позвольте ему реализовать HttpSessionBindingListener и добавить / удалить пользователя из Set, когда он собирается быть связанным / не связанным в сеансе.

Пример запуска:

public class User implements HttpSessionBindingListener {

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
        logins.add(this);
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
        logins.remove(this);
    }

    // @Override equals() and hashCode() as well!

}

Обратите внимание, что вам нужно подготовить Set в области приложения, чтобы он не возвращал null в вышеуказанных методах.Вы можете сделать это в тех же методах с помощью nullcheck или с помощью ServletContextListener#contextInitialized().

Затем в любом месте вашего приложения, где у вас есть доступ к ServletContext, напримерв сервлете вы можете получить доступ к зарегистрированным пользователям следующим образом:

Set<User> logins = (Set<User>) getServletContext().getAttribute("logins");
2 голосов
/ 04 января 2011

Обновление

Подход BalusC более подходит, здесь при таком подходе вы не получите ни одного сеанса, в который не вошли пользователи. Для этого вам нужно отследить HttpSessionBindingListener.

Вы можете реализовать HttpSessionListener и отследить зарегистрированных пользователей

 public void sessionCreated(HttpSessionEvent se) {
  // adding logging in user to some application data map or inserting it to DB
 }

 public void sessionDestroyed(HttpSessionEvent se) {
  // remove logged in user to some application data map or inserting it to DB
 }
1 голос
/ 28 ноября 2011

Более масштабным решением было бы добавить столбец типа «loggedIn» в таблицу пользователей в базе данных и установить для него значение true, когда вы входите в систему. Это приведет к удалению сервера приложений и поддержке распределенной среды. если в будущем вашему приложению нужно будет запустить несколько ящиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...