Контролировать доступ к платформе и проводить время системы в Java - PullRequest
2 голосов
/ 30 августа 2011

Как реализовать следующие функции в проекте с использованием Spring-Security или без него.

1. LoggedIn Count: Количество раз, когда пользователь вошел в систему.

2. Затраченное время: Общее время, проведенное пользователем.

На данный момент я думал о решении с использованием javascript, в котором один запрос будет периодически отправляться на сервер. А внутри сервера он будет увеличивать переменную проводить время.

Тем не менее, хотелось бы знать, что-то связано с самой весенней безопасностью или нет. Или любая другая идея для обработки такой функциональности.

Любая идея / предложение будет высоко ценится ...

Ответы [ 3 ]

1 голос
/ 04 сентября 2011

Есть много способов сделать это, это зависит от используемой вами архитектуры.

вы можете использовать следующие

protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) {
        SecurityContextHolder.getContext().setAuthentication(authResult);
        if (this.eventPublisher != null) {
            eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authResult, this.getClass()));
        }
    }

или

использованияSpring Security

 <bean id="authenticationFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"
     p:sessionAuthenticationStrategy-ref="sas"
     p:authenticationManager-ref="authenticationManager"
    p:authenticationFailureHandler-ref="customAuthenticationFailureHandler"
    p:authenticationSuccessHandler-ref="customAuthenticationSuccessHandler"/>

или с использованием любых пользовательских фильтров

Несколько других указателей, которые обычно используются для отслеживания / анализа пользователя

  1. захват пользовательского агента с пользовательской информацией
  2. перехват времени входа в систему и выхода из системы / сеанса
  3. перехват IP-адреса
  4. перехват неудачных попыток входа
  5. перехват идентификатора сеанса с помощью логина

Как только вся эта информация хранится в постоянном хранилище, они обычно создают поверх нее отчет / процедуру, чтобы получить всю эту информацию, например, сколько пользователей за один день или сколько раз пользовательвошли в систему в течение месяца или сколько времени он провел на сайте в течение месяца и т. д ...

1 голос
/ 05 сентября 2011

1) Для числа входов в систему лучше всего подключиться к Spring Security с помощью AuthenticationSuccessHandler, как сказал @user395072, и сохранить результат в пользовательской таблице в numOfSuccessfulLogins, добавляя +1 при каждом успешном входе.

2) За время, проведенное на сайте, все, что вам нужно, это переменная сеанса, давайте назовем ее $MY_TIME.Затем для каждого запроса , если $MY_TIME не существует в сеансе, вы устанавливаете его на текущую дату (то есть System.currentTimeMillis()).Если он существует, то Вы берете текущее время и вычитаете значение $MY_TIME, и у Вас есть время, потраченное до сих пор в текущем сеансе.По той же просьбе Вам необходимо сохранить ее.Вы можете иметь отдельную таблицу для нее, добавляя новую запись, когда вы устанавливаете $MY_TIME для сеанса и обновляете самую новую через раз.Или Вы можете иметь 2 поля в пользовательской таблице: cumulativeTime и currentSessionTime, и Вы добавляете обновление cumulativeTime += currentSessionTime и currentSessionTime = 0 при установке $MY_TIME в сеанс и при любом другом запросе обновления currentSessionTime = System.currentTimeMillis() - $MY_TIME.

1 голос
/ 04 сентября 2011

Я работал с теми же технологиями в прошлом (только не с SpringSecurity), и я сделал похожую вещь, я думаю, что могу дать вам представление о том, как вы могли бы это сделать. Я думаю, что это будет работать:

1 Чтобы подсчитать имя успешного входа, вам понадобится переменная в сущности. Эта переменная должна увеличиться на единицу при успешном входе пользователя в систему. Я думаю, что лучшее время для увеличения этого значения - это если проверка правильна и доступ предоставлен (это можно реализовать в методе проверки). Таким образом, вы получаете текущее значение переменной для этого пользователя с помощью языка запросов Hibernate, добавляете 1, а затем обновляете строку.

2 Для этого я не уверен в 100%, но вы можете попробовать это: Переменная в таблице User с именем loginTime должна существовать как @ ApplicationState.

Затем в функции выхода из системы вы создадите переменную tempVariable, которая будет содержать время (длинную переменную) в это текущее время. Вы будете выполнять подчиненную операцию (logOutTime - logInTime), и вы получите время в миллисекундах, затраченное на этот сеанс. Поэтому, прежде чем стирать сеанс и выходить из системы по-настоящему, просто обновите столбец в БД для пользователя, который собирается выйти из системы с результатом.

Также я хотел бы отметить, что эти 2 идеи могут решить проблему с помощью программного подхода, но я уверен, что если вы исследуете Spring Security, вы можете найти способ найти эту информацию в каких-то журналах или аналогичных (Никогда раньше не пользовался Spring Security)

Надеюсь, я правильно объяснил себя. Удачи

...