Liferay 7: CloudAMQP Audit Message Processor
1. Come implementare l’Audit Message Processor
- Tipo globale. Definito attraverso la property eventTypes dell’annotazione @components OSGi impostata al valore * (star o asterisco)
- Riceve i messaggi di audit che elabora e poi invia al broker di messaggistica tramite il protocollo AMQP
- I parametri necessari al fine della comunicazione con CloudAMQP devono essere letti dalla configurazione OSGi
Configurazione OSGi
|
Descrizione
|
Tipo Globale
|
Audit Message Processor
di tipo globale.Tutti i
messaggi di audit passano
attraverso questo message
processor
|
Enabled
|
Consente di abilitare o
disabilitare il message processor.
Il valore di default è impostato a false
|
Server Address
|
Indirizzo IP o FQDN
del server CloudAMQP
|
User Name
|
Username di accesso
ai servizi CloudAMQP
|
Password
|
Password di accesso
ai servizi CloudAMQP
|
Queue Name
|
Nome della coda
definita in CloudAMQP
|
- Configurazione del client AMQP come dipendenza Gradle (versione del client utilizzata la 5.1.2)
- Implementazione del metodo void process(AuditMessage auditmessage) che:
- Verifica che il message processor sia abilitato
- Trasforma il messaggio di audit in formato JSON e poi in byte (perché richiesto da AMQP)
- Crea una connessione verso CloudAMQP utilizzando i parametri letti dalla configurazione OSGi
- Crea il canale di comunicazione
- Setup della coda (il cui nome è in configurazione OSGi)
- Pubblicazione del messaggio di audit
- Chiusura del canale di comunicazione
- Chiusura della connessione
1 2 3 4 |
dependencies { compileInclude group: "com.rabbitmq", name: "amqp-client", version: "5.1.2" ... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
try { if (_log.isDebugEnabled()) { _log.debug("Try to connect " + _buildAMQPURI() + "..."); } ConnectionFactory factory = new ConnectionFactory(); factory.setUri(_buildAMQPURI()); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare( _cloudAMQPAuditMessageProcessorConfiguration.queueName(), durable, exclusive, autoDelete, null); channel.basicPublish("", _cloudAMQPAuditMessageProcessorConfiguration.queueName(), null, auditMessage.toJSONObject().toString().getBytes("UTF-8")); channel.close(); connection.close(); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn( "Send Message Audit to Cloud AMQP Queue failed.", e); } } } |
2. Deploy dell’Audit Message Processor
Nome del modulo
|
Descrizione del modulo
|
portal-security-audit-capture-events
|
Questo modulocontiene i componenti che catturano eventi del portale come per esempio AuthFailure. Questi componenti tracciano gli eventi inviandoli ai message processor attraverso l’Audit Router
|
portal-security-audit-router
|
Questo modulo contiene il componente Standard Audit router che l’implementa l’interfaccia Audit Router
|
portal-security-message-processor
|
Questo modulo contiene imessage processor: Dummy Audit Message Processor,Login Failure Message Processor e CloudAMQP Audit Message Processor
|
1 2 3 4 |
$ git clone https://github.com/amusarra/liferay-portal-security-audit.git $ cd liferay-portal-security-audit $ ./gradlew clean deploy $ cp ../bundles/osgi/modules/*.jar $LIFERAY_HOME/deploy/ |
1 2 3 4 5 6 |
g! lb|grep Audit 43|Active | 10|Liferay Portal Security Audit Capture Events (1.0.0) 44|Active | 10|Liferay Portal Security Audit Message Processor (1.0.0) 45|Active | 10|Liferay Portal Security Audit Router (1.0.0) 350|Active | 10|Liferay Portal Security Audit API (2.0.2) 351|Active | 10|Liferay Portal Security Audit Wiring (2.0.4) |
3. Configurazione dell’Audit Message Processor
4. L’Audit Message Processor in azione
1 2 3 4 5 6 7 8 9 |
18:52:10,827 INFO [liferay/audit-1][CloudAMQPAuditMessageProcessor:125] Message Audit processed and published on liferay_audit_queue Cloud AMQP queue. Details {{product=RabbitMQ, copyright=Copyright (c) 2007-2017 Pivotal Software, Inc., capabilities={exchange_exchange_bindings=true, connection.blocked=true, authentication_failure_close=true, basic.nack=true, publisher_confirms=true, consumer_cancel_notify=true}, information=Licensed under the MPL. See http://www.rabbitmq.com/, version=5.1.2, platform=Java}} |
Sommario
Con questo articolo ho cercato di spiegare con semplicità in che modo grazie al framework Liferay di Security Audit sia facile creare un Audit Message Processor che pubblichi messaggi di audit su un broker di messaggi utilizzando il protocollo AMQP. Inoltre, con questo articolo abbiamo visto come sia anche facile integrare Liferay con un sistema di messaggistica basato sul protocollo AMQP.
Spero di essere stato chiaro nell’esposizione e che abbia catturato il tuo interesse per l’argomento; se così fosse, potresti restituire il favore condividendo l’articolo sui canali dei social network o su altri, ciò che ho scritto potrebbe essere utile anche ad altre persone.