从Java代码发布到Sling servlet - ResourceResolver无法正常工作

时间:2016-06-09 00:34:20

标签: java cq5 aem

我从Java代码发布到另一个站点servlet。它接收数据很好,但由于某种原因,servlet中的resourceResolver不能正常工作。当我使用jQuery发布到servlet时,它工作。 发布到servlet:

    String data = "data";
    String dataString = "data=" + data;
    byte[] dataStringBytes = dataString.getBytes(StandardCharsets.UTF_8);
    HttpURLConnection connection = (HttpURLConnection) new URL("http://example:4502/bin/servlet").openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    DataOutputStream writer = new DataOutputStream(connection.getOutputStream());
    writer.write(dataStringBytes);
    writer.flush();
    writer.close();

来自servlet的片段

@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException {

    // Only works when posted from jQuery???
    ResourceResolver resourceResolver = request.getResource().getResourceResolver();
    Session session = resourceResolver.adaptTo(Session.class);
    PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
}

2 个答案:

答案 0 :(得分:1)

确保允许匿名访问该资源。 使用PageManagerFactory API获取PageManager而不是AdaptTo() https://docs.adobe.com/docs/en/cq/5-6-1/javadoc/com/day/cq/wcm/api/PageManagerFactory.html

答案 1 :(得分:0)

请阅读this帖子和this帖子。从吊索servlet访问资源解析器的理想方法是创建系统用户并调用getServiceResourceResolver方法。这一点非常重要,尤其是在用户匿名时从调度程序中访问servlet时。需要使用有效的系统用户访问资源以避免权限问题。

然后,可以根据需要将此资源解析程序调整为PageManager或TagManager或Session等。