Screen-Scraping einer Adobe CQ5 Web-Page und deren Integration in ein Portal
Für die Integration von Content innerhalb eines Web-Portals ist der Einsatz eines Iframes naheliegend. Hierzu wird ein Portlet entwickelt, das einen Iframe enthält, über den eine Content-Seite aus einem CMS - in unserem Fall Adobe CQ5 - integriert wird. Dieser Lösungsansatz ist jedoch als suboptimal anzusehen. Iframes haben den Nachteil, dass unschöne Scrollbars erscheinen, sofern der eingebundene Content-Bereich umfangreicher ist, als die für den Iframe angegebene Größe. Alle Versuche die Höhe und Breite mittels JavaScript automatisch anzupassen, scheitern sofort, wenn die eingebettete Seite recht komplex ist und bspw. seine Abmessung auch dynamisch mit Hilfe von JavaScript ändert. Des Weiteren unterbinden die Browser aus Sicherheitsgründen den Zugriff über Domain-Grenzen hinweg (Stichwort: Cross-Site-Scripting).
In diesem Blog-Post möchte ich einen anderen Weg beschreiben, den wir bei der Implementierung eines Konzern-Intranets - das wir für einen bekannten deutschen Pharmakonzern umsetzen durften - gingen. Die hier beschriebene Lösung läuft bereits seit mehreren Jahren in einem produktiven Konzern-Intranet. Aus diesem Grund - so denke ich - kann man davon sprechen, dass sich dieser Ansatz bewährte.
Screen-Scraping als Ersatz für Iframes
Bei Screen-Scraping [1] wird der Inhalt, der zu integrierenden Seite geladen und innerhalb des Portlets
wiedergegeben. Alle URLs müssen so umgeschrieben, dass sie über den Portal-Controller laufen. Wir benutzen den Apache Http-Client [2] für das Laden der Content-Seite aus Adobe CQ5. Der HTML-Stream wird anschließend mit dem Jericho HTML Parser gelesen. Bei diesem Schritt werden auch gleich alle URLs »umgebogen«, damit sie von nun an auf das Portal-Dispatcher-Servlet zeigen. Alle Klicks auf Links der aggregierten Content-Seite laufen über dieses Servlet.
Was muss bei Screen-Scraping beachtet werden?
Beim Design des Adobe CQ5 Templates ist es wichtig, folgenden Punkten Beachtung zu schenken:
- Umbiegen aller URLs, dass sie über das Portal laufen. Portal fungiert als Proxy. Wie oben beschrieben.
- CSS ist dem Portal hinzuzufügen. CSS Body Tag wird durch das Portal eingesteuert.
- CSS und JavaScripts sollten keine URLs enthalten, die etwas nachladen. Falls doch kann man mit Jericho die URLs in CSS und JavaScript umbiegen.
- jQuery Libs und andere im Portal installieren.
- Ajax Calls müssen genau analysiert werden. Am besten ohne.
- Es darf entweder HTTP Get oder HTTP Post für Formulare benutzt werden.
- Autorisierung kann nicht über NTLM laufen. WindowsID wird in URL übergeben.
Fazit
Die in diesem Blog aufgezeigte Screen-Scraping-Technik eignet sich extrem gut für die Integration von Web-Seiten aus einem CMS wie Adobe CQ5. Jedoch ist dies nur möglich, wenn die Punkte vom obigen Abschnitt beachtet werden können. Diese Lösung bietet eine viel bessere Integration als ein Iframe. Das Bild zeigt auf der linken Seite die Content-Seite, wie sie im CMS aussieht und rechts wie diese integriert in ein Portlet erscheint. Beide Seiten sind - wie man schön sieht - identisch und es gibt keine hässlichen Scrollbars.