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

AEM не будет предоставлять какую-либо функцию OOTB для отслеживания последних данных входа пользователей — отметку времени входа пользователя.

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

Этого можно добиться, включив пользовательский процесс AuthenticationInfoPostProcessor для захвата метки времени последнего входа в систему и создав пользовательский отчет ACS AEM Commons для извлечения необходимых данных профиля пользователя вместе с меткой времени последнего входа.

В качестве первого шага определите пользовательский компонент AuthenticationInfoPostProcessor, чтобы обновить метку времени последнего входа в профиль пользователя.

АутентификацияИнфоПостпроцессор

AuthenticationInfoPostProcessor позволяет пакетам изменять объект AuthenticationInfo после выполнения аутентификации.

AuthenticationHandler#extractCredentials вызывает AuthenticationInfoPostProcessor#postProcess с AuthenticationInfo при успешной аутентификации. «Постпроцесс» может изменять AuthenticationInfo или выполнять другие операции в зависимости от требований, в нашем случае обновляя профиль пользователя с отметкой времени входа.

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

Включите пользователя службы с именем «custom-user-manager» и предоставьте доступ jcr:read/jcr:write к /home/users, а также включите сопоставление пользовательских служб.

Теперь профиль пользователя будет обновляться с отметкой времени входа при каждом входе в пользовательское свойство «lastloggedin».

Давайте теперь создадим собственный отчет ACS AEM Commons для получения основных пользовательских данных.

Инструменты →ACS AEM Commons →Отчеты

Добавьте новый отчет с именем «user-report» (я генерирую его в AEM как экземпляр Cloud Author с последним — 4.8.0 ACS AEM Commons пакетом)

Отредактируйте отчет и добавьте компонент «Конфигурация отчета о запросах JCR» в раздел «Конфигурация».

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

SELECT * FROM [rep:User] AS user WHERE ISDESCENDANTNODE([/home/users]) AND NOT ISDESCENDANTNODE([/home/users/system/cq:services/internal]) AND NOT ISDESCENDANTNODE([/home/users/system/acs-commons]) AND NOT ISDESCENDANTNODE([/home/users/system]) AND NOT ISDESCENDANTNODE([/home/users/system/translation])

Язык запросов — JCR SQL2

Размер страницы -50

Теперь настройте необходимые поля, включая «lastloggedin» в разделе «Столбцы результатов» с типом компонента «Текстовый столбец построителя отчетов ACS Commons».

Теперь откройте отчет и нажмите «Выполнить отчет». При необходимости отчет можно загрузить в виде CSV-файла — теперь отчет включает отметку времени последнего входа пользователей.

Тот же отчет также можно создать с помощью Инструменты → ACS AEM Commons → Средство экспорта пользователей в CSV, этот отчет включает дополнительные сведения, такие как «имена групп», но включает всех пользователей в системе, отчет можно загрузить в виде файла CSV.

Даже построитель запросов можно использовать для идентификации входа пользователя в систему в течение определенного времени (параметры могут быть изменены для получения данных для различных сценариев).

p.hits=selective
p.limit=-1
path=/home/users
type=rep:User
1_relativedaterange.property=profile/lastloggedin
1__relativedaterange.lowerBound=-1M
orderby=@profile/lastloggedin
p.properties=profile/lastloggedin profile/givenName profile/familyName profile/email rep:authorizableId

Значение 1__relativedaterange.lowerBound можно изменить в зависимости от ваших требований на 1 с 2 м 3 ч 4 д 5 нед 1 м 1 год.

http://localhost:4502/bin/querybuilder.json?1_relativedaterange.lowerBound=-1M&1_relativedaterange.property=profile%2flastloggedin&orderby=%40profile%2flastloggedin&p.hits=selective&p.limit=-1&p.properties=profile%2flastloggedin%20profile%2fgivenName%20profile%2ffamilyName%20profile%2femail%20rep%3aauthorizableId&path=%2fhome%2fusers&type=rep%3aUser

Это предоставит JSON информацию о пользователе, который входит в систему за последний месяц.

{
  "success": true,
  "results": 2,
  "total": 2,
  "more": false,
  "offset": 0,
  "hits": [
    {
      "rep:authorizableId": "albin",
      "profile": {
        "lastloggedin": "2020-09-10T22:15:41.807+05:30",
        "givenName": "Albin",
        "familyName": "Issac",
        "email": "[email protected]"
      }
    },
    {
      "rep:authorizableId": "admin",
      "profile": {
        "lastloggedin": "2020-09-11T01:52:56.358+05:30",
        "familyName": "Administrator"
      }
    }
  ]
}

Пользовательский процесс AuthenticationInfoPostProcessor можно изменить даже для добавления других сценариев, например, сбора данных о том, сколько раз пользователь входит в систему.