В этом руководстве мы подробно рассмотрим, как создать пользовательский отчет в 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 можно изменить даже для добавления других сценариев, например, сбора данных о том, сколько раз пользователь входит в систему.