AEM:如何获取管理资源解析器,因为 getAdministrativeResourceResolver(Map<String,Object> authenticationInfo) 已被弃用?
AEM: How to get administrative resource resolver, since getAdministrativeResourceResolver(Map<String,Object> authenticationInfo) is deprecated?
我必须获得行政胜利org.apache.sling.api.resource.ResourceResolver
。
但是 API、ResourceResolverFactory.getAdministrativeResourceResolver(Map<String,Object> authenticationInfo)
被贬低了。
在 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();
}
}
@Dileepa 的解决方案可行,但绝对不是硬编码密码的好做法,而且,防止过度使用管理 resourceresolvers/sessions。
查看 sling 文档中提到的 here 实现。
我们添加了以下配置:
\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
配置它:
现在要获得 ResourceResolver
服务,我们需要 运行 以下方法:
resolverFactory.getServiceResourceResolver(null);
我必须获得行政胜利org.apache.sling.api.resource.ResourceResolver
。
但是 API、ResourceResolverFactory.getAdministrativeResourceResolver(Map<String,Object> authenticationInfo)
被贬低了。
在 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();
}
}
@Dileepa 的解决方案可行,但绝对不是硬编码密码的好做法,而且,防止过度使用管理 resourceresolvers/sessions。
查看 sling 文档中提到的 here 实现。
我们添加了以下配置:
\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
配置它:
现在要获得 ResourceResolver
服务,我们需要 运行 以下方法:
resolverFactory.getServiceResourceResolver(null);