Certamente il titolo dell’articolo può sembrare un po’ bizzarro ma non ho trovato titolo migliore. Avrei potuto dare un titolo del tipo “Integrazione tra CRM….” che a mio avviso per il tipo di soluzione descritta nel corso di quest’articolo, non si configura una vera integrazione.
Inizierei specificando meglio i soggetti del titolo attribuendogli un nome. I protagonisti sono, SugarCRM che implementa per l’appunto un sistema di Customer Relationship Management (abbreviato in CRM) e Liferay che invece implementa un sistema di Content Management System (abbreviato in CMS).
Stiamo attraversando una fase dov’è richiesta sempre di più l’integrazione tra i più disparati sistemi informativi che coprono responsabilità diverse, è come fare un puzzle, unire insiemi pezzi diversi in modo tale che la loro collaborazione consenta di raggiugere l’obiettivo, cercando di mantenere un’interfaccia unica per interagire con l’intero o parti del puzzle.
Nel corso di queste poche righe vedremo quindi come sia possibile e semplice mettere SugarCRM proprio “dentro” Liferay. Ipotizzando uno scenario dove Liferay implementa un portale operativo da cui è possibile accedere a informazioni e procedure di un’ipotetica azienda, non sarebbe una cosa fuori dal comune, consentire l’accesso al CRM direttamente dal portale senza essere obbligati a dover aprire una nuova finestra del browser evitando anche la ripetizione dell’autenticazione.
Raggiungere l’obiettivo è davvero semplice con Liferay, non sono richiesti sviluppi ma solamente attività di configurazione dell’iFrame Portlet, già disponibile di serie con Liferay. Quanto mostrato nel corso della trattazione è applicabile sia all’edizione Community sia all’edizione Enterprise di Liferay, la versione utilizza per quest’occasione è una 6.1 GA2 CE.
1. Requisiti
Affinché la soluzione del “dentro” sia applicabile, è indispensabile che i seguenti requisiti siano soddisfatti:
- Accesso al portale Liferay con un livello d’accesso di tipo amministrativo o con un ruolo tale da consentire l’aggiunta di applicazioni (portlet) e la possibilità di configurazione delle stesse;
- Possibilità di esecuzione di attività di tipo sistemistico, tipo operazioni di start, stop e modifica delle configurazioni;
- URL dell’istanza di SugarCRM.
2. Funzionamento
Ogni utente del portale, quindi autenticato, potrà accedere direttamente dal portale alla propria area di lavoro del CRM senza spostarsi di “browser”, evitando per altro di ripetere la procedura d’autenticazione. Come introdotto in precedenza, questa possibilità è offerta dall’iFrame Portlet.
L’iFrame Portlet permette di inserire un’altra pagina HTML all’interno della pagina che ospita la portlet. Inoltre, l’utente può navigare attraverso la pagina “nascosta” senza perdere il contesto della pagina del portale.
L’iFrame Portlet utilizza il tag HTML iframe introdotto dalla versione 4 di HTML, ed è supportata in tutti i principali browser. L’iFrame Portlet consente di regolare la dimensione della pagina HTML e svariati altri attributi.
Una caratteristica importante di questa portlet e fondamentale in questo scenario è la possibilità di poter eseguire il processo di autenticazione al posto nostro. Sono supportati due tipi di autenticazione: Basic e Form, noi faremo uso del secondo metodo, comunque, la scelta dipende dal tipo di autenticazione supportata dall’applicazione web da integrare.
Avrete già intuito che un requisito indispensabile affinché l’autenticazione sia trasparente consiste nell’asserzione che sia username (solitamente l’attributo screen name) sia password dell’utente del portale coincida con le rispettive del CRM.
3. Configurazione
Aggiunta la portlet su una vostra pagina, non resta che procedere con la configurazione i cui parametri principali e valori sono i seguenti:
- URL dell’istanza di SugarCRM a cui volete dare l’accesso;
- Tipo di autenticazione
- Tipo: Form
- Method: POST
- Username
- FieldName: user_name
- Value: @screen_name@
- Password:
- FieldName: user_password
- Value: @password@
- Variabili Hidden
- module=Users;action=Authenticate
I valori indicati come @screen_name@ e @password@ saranno poi sostituiti a runtime con i valori reali e in seguito inviati a SugarCRM nel processo d’autenticazione, ecco il motivo per cui è necessario che le credenziali coincidano; in caso contrario sarete necessariamente obbligati a eseguire manualmente l’autenticazione tramite la form di SugarCRM. In Figura 1 è mostrata la configurazione dell’iFrame portlet. L’URL specificato fa riferimento a un’istanza di SugarCRM CE 6.5 ospitata sul cloud Open Shift.
Esiste un meccanismo di sicurezza di Liferay tale per cui le vostre credenziali non sono memorizzate (in sessione, cookie, etc…) per impostazione predefinita, inoltre è possibile fare in modo che i soli utenti appartenenti a un determinato ruolo possano inviare la propria password a sistemi esterni tramite l’iFrame portlet.
Tramite delle properties di configurazione è possibile abilitare la memorizzazione della password (in chiaro) in sessione e specificare inoltre il ruolo da assegnare agli utenti che devono avere la possibilità di trasmettere la password all’esterno tramite la portlet iFrame.
public static String getPassword(PortletRequest portletRequest, String password)
throws PortalException, SystemException {
if (!isPasswordTokenEnabled(portletRequest)) {
return StringPool.BLANK;
}
if (Validator.isNull(password) || password.equals("@password@")) {
password = PortalUtil.getUserPassword(portletRequest);
if (password == null) {
password = StringPool.BLANK;
}
}
return password;
}
|
Listato 1 Get della password dalla sessione (Link su Gist ).
Il Listato 1 mostra il metodo getPassword() della classe IFrameUtil del package com.liferay.portlet.iframe.util che recupera la password utente dalla sessione effettuando prima un controllo dell’associazione ruolo/utente tramite il metodo isPasswordTokenEnabled().
### # IFrame Portlet ### # Specify a role name that a user must be associated with in order to # configure the IFrame portlet to use the @password@ token. This token is # used to post the password of users who access this portlet in order to # automatically login to the framed site. # # No role is required by default. However, it is recommended that you # specify a role in high security environments where users who configure # this portlet may attempt password theft. See LPS-5272 for more # information. # iframe.password.token.role=iFrameUserToken ## ## Session ## # # Set this to true to store the user's password in the session. # session.store.password=true |
Listato 2 Configurazione file di properties portal-ext.properties (Link su Gist)
La configurazione (vedi Listato 2) mostra il ruolo (di un nome a vostra scelta) cui gli utenti devono appartenere e l’esplicita istruzione di memorizzare in sessione la password dell’utente. L’applicazione di questa configurazione richiede l’operazione di riavvio del portale. Il file di configurazione portal-ext.properties si trova o deve essere creato all’interno della directory webapps/ROOT/WEB-INF/classes.
A portale riavviato e portlet configurata in precedenza, basterà accedere con le vostre credenziali per avere la vostra area di lavoro CRM pronta all’uso, così come mostrato in Figura 4.
In Figura 5 è invece mostrato il passaggio dei parametri all’applicazione target, in questo caso SugarCRM. Ho evidenziato in particolare l’attributo password, passato in chiaro.
4. Conclusioni
In questo breve articolo abbiamo visto come sia semplice integrare SugarCRM “dentro” Liferay sfruttando la potenzialità messa a disposizione dall’iFrame portlet. E’ senz’altro comodo poter eseguire l’autenticazione in modo trasparente. Questa soluzione può essere adottata per integrare qualunque tipo di applicazione web.
Related articles
- SugarCRM + PostgreSQL available OpenShift (musarra.wordpress.com)
- Released new version of SugarCRM PostgreSQL Virtual Appliance (musarra.wordpress.com)
- Released the first version of SugarCRM Java Client (musarra.wordpress.com)
- Liferay in Action (Manning) (i-programmer.info)
- SugarCRM inside of Liferay (musarra.wordpress.com)





Pingback: RE: Liferay with SugarCRM using iframe - Forums - Liferay.com
Antonio, please do you have an english version of this article?
Hi Karel,
at this moment I have not the english version of the article. I hope in the next days I will able translate this article.
Thanks you.
Thanks Antonio. It would be great.
Karel
Hi Karel,
I have just published the English version of the article (http://musarra.wordpress.com/2012/10/12/sugarcrm-inside-of-liferay/). Let me know what you think.
Thanks,
Antonio.
Many thanks Antonio. But im unable where can i find part Listing 1 and 2:
“Through the configuration properties you can enable the storage of the password (unencrypted) in session, and also specify the role to be assigned to users who need to be able to send your password to the outside through the iFrame portlet.” and “Listing 2 shows GetPassword() class IFrameUtil com.liferay.portlet.iframe.util package that retrieves the user’s password from the session, checking the association role/user using the method isPasswordTokenEnabled().”
I have succesfully configured Iframe portlet by Figure 1, role by Figure 2 assigned to user, same users with passwords in Liferay and SugarCRM, byt i cannot find where to change “configuration properties where i can enable the storage of the password”
Many thnaks for your help
Karel
Hi Karel,
the configuration shown in Listing 2 must be specified in the file portal-ext.properties. This file must be created or found within the directory webapps/ROOT/WEB-INF/classes.
I have updated also article.
Bye,
Antonio.
Hi Antonio, I created fikle portal-ext.properties and now iframe send username correctly but password still not. I have error message “You must specify a valid username and password.”.
Need I set somewhere Listing 1 – Get clear password from session?
Thanks
Karel
Hi Karle,
Q: Need I set somewhere Listing 1 – Get clear password from session?
R: No. This is the class to get the clear password of the user.
After create the portal-ext.properties, have you restarted liferay?
Do you remember that the passwords must be equal (between Liferay and SugarCRM)?
Bye,
Antonio.
Hi Antonio,
After create the portal-ext.properties, have you restarted liferay? YES
Do you remember that the passwords must be equal (between Liferay and SugarCRM)? also YES
In my portal-ext.properties is only configuration showed on Listing 2, is it enough?
Regards
Karel
Hi Karel,
Q:In my portal-ext.properties is only configuration showed on Listing 2, is it enough?
R: YES
It ‘s really weird.
You also have the role associated with the user?
Bye,
Antonio.
Hi Antonio,
You also have the role associated with the user? also YES
its really weird
Hi Karel,
try to send me (antonio.musarra@gmail.com) the configuration of the iFrame Portlet.
Bye and a good week end.
Antonio.
sended.
Thanks
Karel