bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Configurare jaas e installare una servlet in Liferay 6.x

Ciao a tutti!

Il post di oggi lo scrivo a beneficio di un collega che sta lontano ma che ogni volta si perde su questi dettagli tecnologici da due minuti! :)

Il tema è presto detto: installare su Liferay delle servlet e fare in modo che ereditino l'autenticazione del container attraverso jaas.

I passi per realizzare questa cosa sono pochi e molto semplici; vediamoli nel dettaglio!

Abilitare JAAS su Liferay 6

Per abilitare JAAS su Liferay, dobbiamo:

  • Abilitare su Tomcat il modulo di jaas
  • Abilitare su Liferay la funzionalità di autenticazione via jaas

Abilitare su Tomcat il modulo di jaas

Prima di tutto dobbiamo istruire il contesto di Liferay ad utilizzare il realm di autenticazione; per farlo, nel file context.xml che si trova dentro <tomcat>/conf, dovete inserire questo frammento:

<Realm

className="org.apache.catalina.realm.JAASRealm"

appName="PortalRealm"

userClassNames="com.liferay.portal.kernel.security.jaas.PortalPrincipal"

roleClassNames="com.liferay.portal.kernel.security.jaas.PortalRole"

/>

Lo potete trovare anche dentro a <tomcat>/conf/Catalina/localhost/ROOT.xml commentato; il motivo per il quale non lo scommentiamo qui dentro ma lo spostiamo in context.xml è perché vogliamo essere sicuri che sia un oggetto cross context fra tutte le webapp.

Fatto questo, creiamo un file che chiameremo jaas.config dentro a <tomcat>/conf; il suo contenuto sarà il seguente:

PortalRealm {

com.liferay.portal.kernel.security.jaas.PortalLoginModule required;

};

Infine, dobbiamo dire a Tomcat che deve usare questo file; per farlo, dentro a <tomcat>/bin/setenv.sh, aggiungiamo questa property:
-Djava.security.auth.login.config=<path assoluto al vostro>
/liferay-portal-6.2.0-ce-ga1/tomcat-7.0.42/conf/jaas.config
E per la parte di Tomcat abbiamo concluso!
Ora passiamo a configurare Liferay!

Abilitare su Liferay la funzionalità di autenticazione via jaas

Qui, come al solito, è tutta una questione di properties! :)

Nel portal-ext.properties, infatti, dobbiamo abilitare il jaas e dirgli che tipo di autenticazione vogliamo che sia utilizzata; per farlo, aggiungete queste due property:

portal.jaas.enable=true

portal.jaas.auth.type=emailAddress

Perfetto!

Se ora provate a far partire Tomcat e a loggarvi, dovrebbe apparirvi per poi scomparire subito la finestra che dice che sta autenticando usando jaas!

Montare una servlet su Liferay 6

Ora veniamo al punto saliente: montare su Liferay una mia servlet custom e fare in modo che questa possa ereditare le credenziali di sicurezza dal portale!

Qui procediamo utilizzando un plugin di tipo hook, perché quello che vogliamo fare, alla fine, è deployare una webapp che contenga la nostra servlet e il web.xml coerente con la sua configurazione.

Nel nostro caso, quindi, useremo questa servlet per verificare che tutto sia fatto a dovere:

package it.dvel.test;


import java.io.IOException;

import java.io.Writer;

import java.security.Principal;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class TestPrincipalServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

private void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Principal principal = request.getUserPrincipal();

Writer out = response.getWriter();

response.setContentType("text/html");

out.write("<h1>Test Principal</h1>");

out.write("<h2>From request Principal</h2>");

if (principal != null)

out.write("Principal: " + principal.getName());

else

out.write("Sorry, no more Principal..");

}

}

Come vedete non fa nulla di speciale: ci dice se siamo o meno loggati con un Principal! :)

Ora facciamo in modo che Liferay sia in grado di caricarla; questa è facile: dobbiamo sfruttare le funzionalità che Liferay ci mette a disposizione in architettura! :)

Nel dettaglio, anziché montare direttamente la nostra servlet, dobbiamo avvalerci di una servlet di bridge già inserita nel portale che farà da wrapper alla nostra!

Ecco l'xml da mettere nel web.xml del nostro hook che, a mio avviso, si spiega da solo! :)

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="WebApp_ID" version="2.5" >

<servlet>

<servlet-name>JaderServlet</servlet-name>

<servlet-class>com.liferay.portal.kernel.servlet.PortalDelegateServlet</servlet-class>

<init-param>

<param-name>servlet-class</param-name>

<param-value>it.dvel.test.TestPrincipalServlet</param-value>

</init-param>

<init-param>

<param-name>sub-context</param-name>

<param-value>my-mount-point</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

</web-app>

Ed il gioco è fatto! :)

Fate deploy del vostro hook, aspettate che sia caricato e invocate quest'url:

http://localhost:8080/delegate/my-mount-point

Come per incanto e anche un poco per magia vedrete il vostro Principal popolato!

E se non lo vedete loggatevi e riprovate!

E se non lo vedete ancora, beh.. Scrivete un commento su questo post che vediamo come possiamo aiutarvi! ;)

Alla prossima! :)

Per approfondimenti su jaas:
- Java Authentication and Authorization Service

Precedente
Commenti
Nessun commento. Vuoi essere il primo.