无法在 sitemap.xml 上写入(权限被拒绝)
unable to write on sitemap.xml (permission denied)
我正在尝试更新“/”下的 sitemap.xml 文件。我收到权限被拒绝的错误,下面是代码片段。
XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
try {
Session session = repository.loginAdministrative(null);
XMLStreamWriter stream = outputFactory.createXMLStreamWriter(new FileWriter("/sitemap.xml"));
stream.writeStartDocument("1.0");
stream.writeStartElement("", "urlset", NS);
stream.writeNamespace("", NS);
write(page, stream, resourceResolver);
for (Iterator<Page> children = page.listChildren(new PageFilter(), true); children.hasNext();) {
write(children.next(), stream, resourceResolver);
}
stream.writeEndElement();
stream.writeEndDocument();
session.save();
} catch (XMLStreamException e) {
logger.error(e.getMessage());
}
catch (Exception ioex){
logger.error(ioex.getMessage());
}
}
甚至我还在 JCR 中设置了此文件的权限,供 jcr:all 访问的贡献者使用。但仍然出现权限被拒绝的错误。
谢谢
您需要 root 权限才能编辑 /sitemap.xml
。你试过了吗sudo
?
我猜你想编辑程序目录中的XML,所以使用./sitemap.xml
.
下一行:
XMLStreamWriter stream = outputFactory.createXMLStreamWriter(new FileWriter("/sitemap.xml"));
在文件系统中创建一个文件,而不是在 JCR 存储库中创建一个节点。为了将结果保存到 JCR 节点,首先将其写入一个 ByteArrayOutputStream,然后使用 JCR API 将缓冲区写入新节点:
// ByteArrayOutputStream bos already contains the serialized sitemap
ValueFactory vf = session.getValueFactor();
Binary binary = vf.createBinary(new ByteArrayInputStream(bos.toByteArray()));
Node rootNode = session.getRootNode();
Node sitemapNode = rootNode.addNode("sitemap.xml", "nt:file");
Node resNode= sitemapNode.addNode("jcr:content", "nt:resource");
resNode.setProperty ("jcr:data", binary);
session.save();
请注意,根节点 (/
) 可能不是写入任何内容的最佳位置。您应该在 /content
中的某处编写您的地图,并使用 Sling Mappings、自定义 servlet 或过滤器来处理 /sitemap.xml
路径。
我正在尝试更新“/”下的 sitemap.xml 文件。我收到权限被拒绝的错误,下面是代码片段。
XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
try {
Session session = repository.loginAdministrative(null);
XMLStreamWriter stream = outputFactory.createXMLStreamWriter(new FileWriter("/sitemap.xml"));
stream.writeStartDocument("1.0");
stream.writeStartElement("", "urlset", NS);
stream.writeNamespace("", NS);
write(page, stream, resourceResolver);
for (Iterator<Page> children = page.listChildren(new PageFilter(), true); children.hasNext();) {
write(children.next(), stream, resourceResolver);
}
stream.writeEndElement();
stream.writeEndDocument();
session.save();
} catch (XMLStreamException e) {
logger.error(e.getMessage());
}
catch (Exception ioex){
logger.error(ioex.getMessage());
}
}
甚至我还在 JCR 中设置了此文件的权限,供 jcr:all 访问的贡献者使用。但仍然出现权限被拒绝的错误。
谢谢
您需要 root 权限才能编辑 /sitemap.xml
。你试过了吗sudo
?
我猜你想编辑程序目录中的XML,所以使用./sitemap.xml
.
下一行:
XMLStreamWriter stream = outputFactory.createXMLStreamWriter(new FileWriter("/sitemap.xml"));
在文件系统中创建一个文件,而不是在 JCR 存储库中创建一个节点。为了将结果保存到 JCR 节点,首先将其写入一个 ByteArrayOutputStream,然后使用 JCR API 将缓冲区写入新节点:
// ByteArrayOutputStream bos already contains the serialized sitemap
ValueFactory vf = session.getValueFactor();
Binary binary = vf.createBinary(new ByteArrayInputStream(bos.toByteArray()));
Node rootNode = session.getRootNode();
Node sitemapNode = rootNode.addNode("sitemap.xml", "nt:file");
Node resNode= sitemapNode.addNode("jcr:content", "nt:resource");
resNode.setProperty ("jcr:data", binary);
session.save();
请注意,根节点 (/
) 可能不是写入任何内容的最佳位置。您应该在 /content
中的某处编写您的地图,并使用 Sling Mappings、自定义 servlet 或过滤器来处理 /sitemap.xml
路径。