首页 文章

GET和POST无法在AEM CQ6.2发布实例上运行

提问于
浏览
0

我正在研究adobe aem cq 6并使用Java应用程序中的HttpPost创建用户 . 对于 author instance ,此代码为 working fine ,但在 publish instance 上为 not working .

JAVA代码

public static void createUser() throws IOException
    {

        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(
                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
                new UsernamePasswordCredentials("admin", "admin"));
        CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCredentialsProvider(credsProvider)
                .build();

        HttpPost httpPost = new HttpPost("http://localhost:4503/libs/granite/security/post/authorizables");
        List <NameValuePair> nvps = new ArrayList <NameValuePair>();
        nvps.add(new BasicNameValuePair("createUser", ""));
        nvps.add(new BasicNameValuePair("authorizableId", "dd90"));
        nvps.add(new BasicNameValuePair("rep:password", "dd90"));
        nvps.add(new BasicNameValuePair("profile/email", "dd90@hotmail.com"));
        nvps.add(new BasicNameValuePair("intermediatePath", "/home/users/test/"));
        httpPost.setEntity(new UrlEncodedFormEntity(nvps));
        CloseableHttpResponse response2 = httpclient.execute(httpPost);

        try {
            System.out.println(response2.getStatusLine());
            HttpEntity entity2 = response2.getEntity();
            System.out.println(EntityUtils.toString(response2.getEntity()));
            // do something useful with the response body
            // and ensure it is fully consumed
            EntityUtils.consume(entity2);
        } finally {
            response2.close();
        }
}

我从cq error.log中得到以下错误

POST / libs / granite / security / post / authorizables HTTP / 1.1] com.adobe.granite.security.user.internal.servlets.AuthorizableServlet处理AuthorizableServlet时出错POST javax.jcr.AccessDeniedException:null org.apache.jackrabbit . oak.util.NodeUtil.addChild(NodeUtil.java:113)位于org.apache.jackrabbit.oak.security.user.UserProvider的org.apache.jackrabbit.oak.util.NodeUtil.getOrAddTree(NodeUtil.java:171) . 位于org.apache.jackrabbit.oak.security.user.Uack可移动节点上的org.apache.jackrabbit.oak.security.user.UserProvider.createAuthorizableNode(UserProvider.java:257)中的createFolderNodes(UserProvider.java:067)(UserProvider . java:185)org.apache.jackrabbit.oak.security.user.UserManagerImpl.createUser(UserManagerImpl.java:162)at org.apache.jackrabbit.oak.jcr.delegate.UserManagerDelegator $ 9.perform(UserManagerDelegator.java:177 )org.apache.jackrabbit.oack.delegate.UserManagerDelegator $ 9.perform(UserManagerDelegator.java:173)org.apache.jackrabbit.oak.jcr.delegate.Sess at org.apache.jackrabbit.oak.jcr.delegate.UserManagerDelegator $ 9.perform(UserManagerDelegator.java:173) ionDelegate.perform(SessionDelegate.java:208)位于org.apache.jackrabbit.oak.jcr.delegate.UserManagerDelegator.createUser(UserManagerDelegator.java:173)的com.adobe.granite.security.user.internal.servlets.AuthorizableServlet . 在com.adobe.granite.security.user.internal.servlets.AuthorizableServlet.doPost(AuthorizableServlet.java:707)的org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet . )中创建(AuthorizableServlet.java:800) . java:149)atg.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:345)org.apache上的org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:376)位于org.apache.sling.engine的org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44)中的.sling.engine.impl.request.RequestData.service(RequestData.java:546) com.day.cq.personalization.impl中的.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:77) . 位于com.day.cq.wcm.core.impl.WCMDebugFilter.doFilter的org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)中的TargetComponentFilter.doFilter(TargetComponentFilter.java:96)( WCMDebugFilter.java:151)atg.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)at com.day.cq.wcm.core.impl.WCMComponentFilter.filterRootInclude(WCMComponentFilter.java: 362)在com.day.cq.wcm.core.impl.WCMComponentFilter.doFilter(WCMComponentFilter.java:177)atg.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)at org位于org.apache.sling.engine的org.apache.sling.engine.impl.filter.RequestSlingFilterChain.render(RequestSlingFilterChain.java:49)中的.apache.sling.engine.impl.SlingRequestProcessorImpl.processComponent(SlingRequestProcessorImpl.java:282) .impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:77)位于com.adobe.cq.social.ugcbase.security . impl.SaferSlingPostServlet.doFilter(SaferSlingPostServlet.java:126)位于com.day.cq.dam.core.impl.assetlinkshare的org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68) . AdhocAssetShareAuthHandler.doFilter(AdhocAssetShareAuthHandler.java:381)位于com.day.cq.dam.core.impl.servlet.ActivityRecordHandler的org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68) . doFilter(ActivityRecordHandler.java:155)org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain . java:73)at com.adobe.granite.requests.logging.impl.RequestLoggerImpl.doFilter(RequestLoggerImpl.java:114)at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)在org.apach的com.adobe.granite.csrf.impl.CSRFFilter.doFilter(CSRFFilter.java:220) egling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)位于org.apache.sling.engine的org.apache.sling.security.impl.ContentDispositionFilter.doFilter(ContentDispositionFilter.java:181) . impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)位于org.apache.sling.engine.impl.filter的com.day.cq.wcm.core.impl.AuthoringUIModeServiceImpl.doFilter(AuthoringUIModeServiceImpl.java:292) . AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)位于org.apache.sling.engine.impl.filter.AbstractSlingFilterChain的com.day.cq.wcm.core.impl.warp.TimeWarpFilter.doFilter(TimeWarpFilter.java:106) . 的doFilter(AbstractSlingFilterChain.java:68)at com.day.cq.wcm.mobile.core.impl.redirect.RedirectFilter.doFilter(RedirectFilter.java:248)at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68) at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:129)org.apache.sling.过程中的org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68) .engine.impl.debug.RequestProgressTrackerLogFilter.doFilter(RequestProgressTrackerLogFilter.java:95)atg.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)at com.day.cq.analytics.provisioning位于com.adobe.cq.social.commons.cors.CORSAuthenticationFilter的org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)中的.impl.UserAuthenticationRequestFilter.doFilter(UserAuthenticationRequestFilter.java:119) .doFilter(CORSAuthenticationFilter.java:91)at org.apache.sling.engine.impl.filter.AbstractSlingFilterC hain.doFilter(AbstractSlingFilterChain.java:68)位于org.apache.sling.engine.impl.filter.AbstractSlingFilterChain的com.day.cq.wcm.foundation.forms.impl.FormsHandlingServlet.doFilter(FormsHandlingServlet.java:285) . doFilter(AbstractSlingFilterChain.java:68)at com.adobe.granite.optout.impl.OptOutFilter.doFilter(OptOutFilter.java:74)at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java: 68)at com.day.cq.wcm.core.impl.WCMRequestFilter.doFilter(WCMRequestFilter.java:90)at com的org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)位于org.apache.sling的org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)的.adobe.cq.mcm.campaign.servlets.CampaignCopyTracker.doFilter(CampaignCopyTracker.java:100) .rewriter.impl.RewriterFilter.doFilter(RewriterFilter.java:83)at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingF) ilterChain.java:68)at com.adobe.granite.httpcache.impl.InnerCacheFilter.doFilter(InnerCacheFilter.java:77)at com.adobe.granite.httpcache.impl.InnerCacheFilter.doFilter(InnerCacheFilter.java:56)at org位于org.apache.sling的com.adobe.granite.rest.impl.servlet.ApiResourceFilter.doFilter(ApiResourceFilter.java:67)的.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)位于org.apache.sling.engine.impl.filter的org.apache.sling.bgservlets.impl.BackgroundServletStarterFilter.doFilter(BackgroundServletStarterFilter.java:169)的.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68) .AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:68)at com.adobe.granite.resourceresolverhelper.impl.ResourceResolverHelperImpl.doFilter(ResourceResolverHelperImpl.java:84)at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain) .java:68)at org.apache.sling.engine.impl.SlingRequestP位于org.apache.felix.http.base.internal.handler.ServletHandler.handle的org.apache.sling.engine.impl.SlingMainServlet.service(SlingMainServlet.java:216)中的rocessorImpl.doProcessRequest(SlingRequestProcessorImpl.java:151) ServletHandler.java:85)org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:79)at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java: 129)org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java: 74)org.apache.sling.security.impl.ReferrerFilter.doFilter(ReferrerFilter.java:290)org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)at org位于org.apache.felix的com.adobe.granite.license.impl.LicenseCheckFilter.doFilter(LicenseCheckFilter.java:308)的.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74) .http.base.inte rnal.handler.FilterHandler.handle(FilterHandler.java:135)位于org.apache.felix.http.sslfilter的org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74) . internal.SslFilter.doFilter(SslFilter.java:89)位于org.apache.felix.http.base.internal的org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135) . dispatch.InvocationChain.doFilter(InvocationChain.java:74)位于org.apache.felix.http.base.internal.handler.FilterHandler的org.apache.sling.featureflags.impl.FeatureManager.doFilter(FeatureManager.java:116) . 句柄(FilterHandler.java:135)org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:74)at org.apache.sling.engine.impl.log.RequestLoggerFilter.doFilter( RequestLoggerFilter.java:75)atg.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:135)org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter( InvocationChain.java:74)atorg.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:124)位于javax的org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:61) . Servlet.http.HttpServlet.service(HttpServlet.java:725)atg.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java: 587)org.eclipse.jetty上的org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)或org.eclipse.jetty上的org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)位于org.eclipse.jetty.server.SseionHandler.doScope(SessionHandler.java:185)的org.eclipse.jetty.server.hand.ContextHandler.doScope(ContextHandler)中的.servlet.ServletHandler.doScope(ServletHandler.java:515) .java:1061)org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)at or位于org.eclipse.jetty.server.HetpChannel的org.eclipse.jetty.server.Server.handle(Server.java:499)的g.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) . 处理org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)的org.eclipse.jetty.io.AbstractConnection $ 2.run(AbstractConnection.java:544)org处理(HttpChannel.java:311) . eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)at org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java:555)at java.lang.Thread.run(Thread的.java:745)

我也尝试过使用CURL命令,它对作者和发布都很好 .

curl -u admin:admin -FcreateUser= -FauthorizableId=dd12 -Frep:password=testuser -Fprofile/email=dd@intel.com -Fprofile/age=32 -Fprofile/familyName=dd -Fprofile/givenName=dd -FintermediatePath="/home/users/test/" http://localhost:4503/libs/granite/security/post/authorizables

不幸的是,由于存在环境限制,我无法将CURL用于此项目 .

我怀疑有一些配置可以在发布实例上启用GET和POST,因为我可以使用上面的java代码来实现作者实例 . 谁能帮帮我吗?我已经花了3天时间找到解决方案并且还在苦苦挣扎 .

Updated on 27/3/2017

我发现只需添加和删除几行代码,导入java.util.Base64就解决了这个问题 .

删除CredentialsProvider哪些setcredentials . 添加以下httpPost声明 .

byte[] message = "admin:admin".getBytes(StandardCharsets.UTF_8);
String encodedString = Base64.getEncoder().encodeToString(message);
httpPost.setHeader("Authorization","Basic " + encodedString);

1 回答

  • 2

    最佳和推荐的做法是在Author上创建用户并将其复制到发布者(除非您使用的是不属于此问题范围的社区) .

    您已经知道如何通过curl在作者上创建用户:

    curl -u admin:admin -FcreateUser= -FauthorizableId=testuser -Frep:password=testuser -FintermediatePath="/home/users/test/" http://localhost:4502/libs/granite/security/post/authorizables
    

    创建用户后,您可以使用以下curl命令复制它:

    curl -u admin:admin -X POST -F path="/home/users/test/testUser -F cmd="activate" http://localhost:4502/bin/replicate.json
    

    这是更简单的解决方案,而不是在发布者中打开安全漏洞 .

    对于Java解决方案,您可以使用上面使用不同路径的相同Java代码POST复制命令 .

    希望这可以帮助 .

相关问题