2016-03-08 7 views

ответ

0

Создайте пользователя в AEM с правыми привилегиями.
Используйте следующий код: username и password пользователя, которые являются внешними. password защищен криптографической поддержкой по умолчанию AEM.

@Component(immediate = true, metatype = true, label = "Configuration Details") 
@Service(value = { MyResourceResolver.class }) 
@Properties({ 
    @Property(label = "Username", name = "username", description = "Username"), 
    @Property(label = "Password", name = "password", description = "Password for the above user (Use crypto support)"), 
}) 
public class MyResourceResolver {  
    @Reference 
    private ResourceResolverFactory resourceFact; 

    @Reference 
    private CryptoSupport cryptoSupport; 

    private String username; 
    private String password; 

    public ResourceResolver getUserResourceResolver() throws LoginException{ 
     Map<String,Object> authenticationInfo = new HashMap<>(2); 
     authenticationInfo.put(ResourceResolverFactory.USER, username); 
     String unprotectedPass; 
     try { 
      unprotectedPass = cryptoSupport.unprotect(password); 
     } catch (CryptoException e) { 
      unprotectedPass = password; 
      log.error(e.getMessage()); 
     } 
     authenticationInfo.put(ResourceResolverFactory.PASSWORD, unprotectedPass.toCharArray()); 
     return resourceFact.getResourceResolver(authenticationInfo); 
    } 

    @Activate 
    protected void activate(Map<String, Object> mapCreated) { 
     log.info("Configuration Map"); 
     username = mapCreated.get("username").toString(); 
     password = mapCreated.get("password").toString(); 
    } 

    @Modified 
    protected void modified(Map<String, Object> mapModified) { 
     log.info("Configuration Modified"); 
     username = mapModified.get("username").toString(); 
     password = mapModified.get("password").toString(); 
    } 
} 
5

Решение по @Dileepa будет работать, но, безусловно, не очень хорошая практика, чтобы жёстко пароли, а также, его всегда хорошо, чтобы предотвратить чрезмерное использование административных resourceresolvers/сессий.

Взгляните на упомянутую реализацию here в документах sling.

+0

По вашему предложению немного изменил код. Не могли бы вы подтвердить его? – Dileepa

+0

:) Да, это будет нормально работать. Я реализовал аналогичный код в одном из моих проектов. – SubSul

+0

Да, это был бы рекомендованный подход с использованием ServiceUserMapper, вот подробная рабочая реализация этого: https://helpx.adobe.com/experience-manager/using/querying-experience-manager-sling.html –

2

Мы добавили следующую конфигурацию:

\apps\qwerty\configs\config\org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.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.default="admin" 
    user.mapping="[com.adobe.granite.oauth.server=oauthservice,com.adobe.granite.oauth.server:authentication-handler=admin,com.day.cq.cq-search-suggest=suggestionservice,com.adobe.cq.social.cq-social-scoring:utility-reader=admin,com.adobe.cq.social.cq-social-commons-oauth:user-reader=admin,com.adobe.cq.social.cq-social-calendar:ugc-writer=admin,com.adobe.cq.social.cq-social-forum:ugc-reader=admin,com.adobe.cq.social.cq-social-group:user-admin=admin,org.apache.sling.scripting.core:workflow-launcher=admin,com.adobe.cq.social.cq-social-storage:ugc-writer=admin,com.adobe.cq.social.cq-social-messaging:utility-reader=admin,com.adobe.cq.social.cq-social-commons-oauth:ugc-writer=admin,com.adobe.cq.social.cq-social-messaging:ugc-writer=admin,com.adobe.cq.social.cq-social-journal:ugc-writer=admin,com.adobe.cq.social.cq-social-forum:workflow-launcher=admin,com.adobe.cq.social.cq-social-commons:utility-reader=admin,com.adobe.cq.social.cq-social-commons:user-reader=admin,com.adobe.cq.social.cq-social-console:communities-user-admin=admin,com.adobe.cq.social.cq-social-ugcbase:utility-reader=admin,com.adobe.cq.social.cq-social-as-provider:ugc-writer=admin,com.adobe.cq.social.cq-social-blog:ugc-writer=admin,com.adobe.cq.social.cq-social-forum:ugc-writer=admin,com.adobe.cq.social.cq-social-ugcbase:ugc-writer=admin,com.adobe.cq.social.cq-social-commons:ugc-writer=admin,com.adobe.cq.social.cq-social-commons:workflow-launcher=admin,com.adobe.cq.social.cq-social-commons-oauth:user-admin=admin,com.adobe.cq.social.cq-social-messaging:user-reader=admin,com.adobe.cq.social.cq-social-handlebars:utility-reader=admin,com.adobe.cq.social.cq-social-tally:ugc-writer=admin]"/> 

Или вы можете настроить его с помощью /sysem/console/configMgr для Apache Sling Service User Mapper Service:

Apache Sling Service User Mapper Service

И теперь, чтобы получить ResourceResolver обслуживание, нам нужно выполнить следующий метод :

resolverFactory.getServiceResourceResolver(null);