gpt4 book ai didi

java - AEM:链接在页面中转换/重写

转载 作者:行者123 更新时间:2023-11-29 06:54:33 25 4
gpt4 key购买 nike

在我当前的项目中,dam Assets 正在被移动到 CDN 服务器,我当前在 img 元素中的 src 属性应该引用相应的 cdn 服务器图像,而不是 dam 中的图像。
例如:我当前的 img 元素如下所示:
< img src="/content/dam/myproject/123.jpg">

我在CDN服务器中有一个对应的123.jpg图片。现在,应该更改 src 以引用 CDN 服务器图像。
< img src="https://cdn-aem.com/content/dam/myproject/123.jpg ">

我可以在组件级别更改它,但我希望使用 OSGi 服务或其他东西在更全局的级别更改它!

任何输入?

最佳答案

您可以使用 Sling Rewriter。 documents在 Apache Sling 网站上可用。我在下面包含了一个示例 Sling Transformer。您还需要添加一个配置节点。您可以在 ACS Commons Versioned Clientlibs 中找到其他示例功能。

添加此转换器并更新 StartElement 方法以处理您的路径更新:

import java.io.IOException;
import java.util.Map;

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.rewriter.ProcessingComponentConfiguration;
import org.apache.sling.rewriter.ProcessingContext;
import org.apache.sling.rewriter.Transformer;
import org.apache.sling.rewriter.TransformerFactory;
import org.osgi.service.component.ComponentContext;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

@Component
@Service
@Property(name="pipeline.type", value="linkrewriter", propertyPrivate=true)
public class LinkRewriterTransformerFactory implements TransformerFactory {

public Transformer createTransformer() {
return new LinkRewriterTransformer();
}

@Activate
protected void activate(Map<String, Object> properties) {
}

@Deactivate
protected void deactivate(ComponentContext ctx) {
}

private class LinkRewriterTransformer implements Transformer {
private ContentHandler contentHandler;
private SlingHttpServletRequest request;

public void characters(char[] ch, int start, int length) throws SAXException {
contentHandler.characters(ch, start, length);
}

public void dispose() {
}

public void endDocument() throws SAXException {
contentHandler.endDocument();
}

public void endElement(String uri, String localName, String qName) throws SAXException {
contentHandler.endElement(uri, localName, qName);
}

public void endPrefixMapping(String prefix) throws SAXException {
contentHandler.endPrefixMapping(prefix);
}

public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
contentHandler.ignorableWhitespace(ch, start, length);
}

public void init(ProcessingContext context, ProcessingComponentConfiguration config) throws IOException {
request = context.getRequest();
}

public void processingInstruction(String target, String data) throws SAXException {
contentHandler.processingInstruction(target, data);
}

public void setContentHandler(ContentHandler handler) {
this.contentHandler = handler;
}

public void setDocumentLocator(Locator locator) {
contentHandler.setDocumentLocator(locator);
}

public void skippedEntity(String name) throws SAXException {
contentHandler.skippedEntity(name);
}

public void startDocument() throws SAXException {
contentHandler.startDocument();
}

public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
final AttributesImpl attributes = new AttributesImpl(atts);

final String href = attributes.getValue("href");

if (href != null) {
for (int i = 0; i < attributes.getLength(); i++) {
if ("href".equalsIgnoreCase(attributes.getQName(i))) {
String cdnPath = /* process your path here */;
attributes.setValue(i, cdnPath);
break;
}
}
}

contentHandler.startElement(uri, localName, qName, attributes);
}

public void startPrefixMapping(String prefix, String uri) throws SAXException {
contentHandler.startPrefixMapping(prefix, uri);
}
}
}

将此配置节点添加到 /apps/myapp/config/rewriter/myapp.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="nt:unstructured"
contentTypes="[text/html]"
enabled="{Boolean}true"
generatorType="htmlparser"
order="1"
paths="[/content/myapp]"
serializerType="htmlwriter"
transformerTypes="[linkchecker,linkrewriter]">
<generator-htmlparser
jcr:primaryType="nt:unstructured"
includeTags="[META,/META,A,/A,IMG,AREA,FORM,BASE,LINK,SCRIPT,BODY,/BODY,VIDEO,/VIDEO,ASIDE,/ASIDE,SECTION,/SECTION]"/>
</jcr:root>

关于java - AEM:链接在页面中转换/重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37166792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com