无法在 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 路径。