我正在从Java代码发布到另一个站点servlet。它接收数据很好,但由于某种原因,servlet 中的资源解析器无法正常工作。当我使用 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);
}
确保允许匿名访问该资源。使用 PageManagerFactory API 获取 PageManager 而不是 AdaptTo()https://docs.adobe.com/docs/en/cq/5-6-1/javadoc/com/day/cq/wcm/api/PageManagerFactory.html
请阅读这篇文章和这篇文章。从 sling servlet 访问资源解析器的理想方法是创建系统用户并调用 getServiceResourceResolver 方法。当用户是匿名时,从调度程序点击 servlet 时,这一点尤其重要。需要使用有效的系统用户访问资源,以避免权限问题。
然后,可以根据您的需要将此资源解析器调整为页面管理器或标签管理器或会话等。