My speech at 2012 Liferay Italy Symposium. Talking about Liferay plugins architecture, deploy process and how to extend a portal with hooks and ext plugins.
1. Using Plugins to Extend and
Customize Liferay
Andrea Di Giorgi
R&D Engineer, SMC Treviso
2.
3. Portlet JSR-286
Punti di Estensione
Utilizzo API pubbliche
Modifica implementazioni classi (Spring e properties)
Modifica pagine JSP
Utilizzo API private
Modifica codice sorgente
5. hooks
Modifica properties (alcune)
Modifica traduzioni
Aggiunta e modifica pagine JSP
Nuovi Indexer Post Processor
Nuove implementazioni servizi generati via Service Builder
Nuovi Servlet Filter
Modifica Action Struts
Portlet + Hook per ModelListener, integrazioni
nei portlet core di Liferay, ecc.
6. ext
Modifica properties non supportate dagli hook
Nuove implementazioni per i bean dichiarati tramite Spring o
properties
Modifica impostazioni dei portlet standard Liferay
liferay-portlet.xml e portlet-custom.xml
Nuove taglib e servizi di utilità
Sovrascrittura diretta di classi
10. Plugins SDK
Ambiente di sviluppo per i plugin Liferay
Basato su Apache Ant
Richiede un bundle Liferay locale
Supporto per Maven in fase di sviluppo
Un Plugins SDK per ciascun progetto «portale»
Versionare l’intero Plugins SDK
11. 1 directory del Plugins SDK
in /portlets, /hooks, ecc.
1 progetto Eclipse/Liferay IDE
1 plugin Liferay
1 file .war
1 webapp
13. Class Loading
JDK Classloader(s)
App Server Classloader(s)
portal-service.jar
Portal Impl
Plugin A
Plugin B
util-bridges.jar
util-java.jar
util-taglib.jar
14. Class Loading
Tutto il codice eseguito nel contesto del plugin
Classi Java eseguite nel contesto del plugin
Pagine JSP eseguite nel contesto del portale
Tutto il codice eseguito nel contesto del portale
15. Class Loading
PortalClassInvoker
Invocare un metodo di una classe del portale da un plugin
PortletActionInvoker
Invocare una Action Struts del portale da un plugin
PortletClassInvoker
Invocare un metodo di una classe di un plugin da un altro
plugin
17. Servlet
Codice eseguito nel contesto del plugin
Basic Authentication
Controllo dei permessi basato sul PermissionChecker
Definizione in web.xml
servlet
SecureFilter
ServletAuthorizingFilter
http://issues.liferay.com/browse/LEP-4682
18. Esempio
Contenuto di un file della Document Library dato il suo
fileEntryId
Basic Authentication
Controllo del permesso di visualizzazione
http://localhost:8080/authenticated-servlet-hook/file_entry/42
22. JSON Web Service
Servizi remoti di un plugin esposti come Web Service JSON
Basic/Digest Authentication
http://www.liferay.com/documentation/
liferay-portal/6.1/development//ai/json-web-services
Controllo dei permessi basato sul PermissionChecker
Deserializzazione automatica degli argomenti
long, String, boolean, Date, Locale, List, Map, etc.
Loose Serialization del valore di ritorno
Model, List, Map, @JSON, JSONSerializable
http://www.liferay.com/community/wiki/-/wiki/Main/JSON+Serialization
23. Esempio
Numero di file nella Document Library suddivisi per «tipo»
(immagine, pdf, ecc.) e ultimo file modificato per ciascun tipo
Basic Authentication
Dati filtrati in base ai permessi dell’utente
http://localhost:8080/api/secure/jsonws/json-web-servicehook.dlstatistics/get-group-statistics?groupId=10180
http://issues.liferay.com/browse/LPS-27014
24. web.xml
<servlet>
<servlet-name>JSON Web Service Servlet</servlet-name>
<servlet-class>
com.liferay.portal.kernel.servlet.PortalClassLoaderServlet
</servlet-class>
<init-param>
<param-name>servlet-class</param-name>
<param-value>
com.liferay.portal.jsonwebservice.JSONWebServiceServlet
</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSON Web Service Servlet</servlet-name>
<url-pattern>/api/jsonws/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JSON Web Service Servlet</servlet-name>
<url-pattern>/api/secure/jsonws/*</url-pattern>
</servlet-mapping>
25. DLProcessor
Elaborazioni eseguite in modo asincrono al caricamento di un
file nella Document Library
Implementazioni dell’interfaccia
com.liferay.portlet.documentlibrary.util.DLProcessor
Proprietà dl.file.entry.processors
28. Sanitizer
«Disinfetta» i contenuti aggiunti dagli utenti
Commenti, blog, message board, wiki, calendario, ecc.
Eseguito prima del salvataggio nel database
Può modificare e adattare il contenuto
portlet-model-hints.xml
<field name="title" type="String">
<sanitize content-type="text/plain" modes="ALL" />
</field>
31. AutoLogin
Ottenere un utente da una request non autenticata
Cookie, Header, sessione, ecc.
Integrazioni con sistemi SSO
Implementazioni dell’interfaccia
com.liferay.portal.security.auth.AutoLogin
Proprietà auto.login.hooks
https://github.com/sergiogonzalez/twitter-login-hook
32. Antivirus
Controllo file nella Document Library
Implementazione dell’interfaccia
com.liferay.portlet.documentlibrary.antivirus.AntivirusScanner
Proprietà dl.store.antivirus.impl
https://github.com/sergiogonzalez/eset-antivirus-hook