Как изменить разрешения для класса Runnable в Adobe AEM? - PullRequest
0 голосов
/ 06 февраля 2020

У AI есть проблема с доступом к ресурсам из моего класса Runnable.

Я реализую компонент Runnable в AEM (v.6.5). Ему нужен доступ к ресурсу, в данном случае это «/ libs / wcm / core / resources / languages». Однако этот ресурс недоступен для анонимного пользователя, и AEM запускает мой компонент с таким пользователем.

Как изменить пользователя внутри моего класса Runnable, чтобы он запускался с другими разрешениями?

Спасибо заранее за помощь.

org. apache .sling.serviceusermapping.impl.ServiceUserMapperImpl.my-service-user. xml:

<?xml version="1.0" encoding="UTF-8"?>
    <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
        jcr:primaryType="sling:OsgiConfig"
        user.mapping="[xxx.yyy.my-app.core:my-service=[my-service-system-user]]"/>

Получение Reosurce:

resourceResolver = resolverFactory.getServiceResourceResolver(Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, "my-service"));

Я прочитал некоторую документацию, но она просто не работает в моем случае.

Я нахожусь в самом начале моего AEM 'приключения', поэтому, возможно, я просто кое-что понимаю:)

Как я понимаю, мне нужен «системный пользователь». Я не хочу зависеть от «acs-aem-commons». Я пытался эту статью в блоге . Я создал пользователя вручную, затем создал файл конфигурации и удалил пользователя из системы. Это не воссоздано.

1 Ответ

3 голосов
/ 06 февраля 2020

Если я правильно понимаю, вы пытаетесь использовать Sling Scheduler для запуска запланированного задания.

С точки зрения доступа к хранилищу, это мало чем отличается от любого другого Сервис OSGi. Любой контент, который не доступен анонимным пользователям, должен быть загружен с использованием специального сервисного пользователя с минимальным набором разрешений, который имеет смысл. Таким образом, вы можете добавить явный доступ только для чтения к данному набору ресурсов и ограничить его указанной c службой OSGi вместо того, чтобы делать части хранилища общедоступными.

Для этого вы может создать отображение пользователей службы, чтобы ваш пакет мог использовать учетную запись пользователя службы. Это позволит вам использовать ResourceResolverFactory#getServiceResourceResolver для создания экземпляра распознавателя ресурса, связанного с сеансом, созданным от имени этого пользователя.

См. https://sling.apache.org/documentation/the-sling-engine/service-authentication.html для получения дополнительной информации.

...