Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/07/2015, 11:36
Avatar de GusGarsaky
GusGarsaky
 
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Ocultar cierto texto en log4j

Con Interceptors de CDI puedes hacerlo. Primero creas tu interceptor:

Código Java:
Ver original
  1. @InterceptorBingind
  2. @Retention(RUNTIME)
  3. @Target({FIELD, TYPE, METHOD, PARAMETER})
  4. public @interface LoggingInterceptor { }


Código Java:
Ver original
  1. @Interceptor
  2. @LoggingInterceptor
  3. public class LoggingInterceptor {
  4.    
  5.     @AroundInvoke
  6.     public Object interceptLogging(InvocationContext ic) throws Exception {
  7.         Message message = LoggerMessage.message;
  8.         // por ejemplo reemplazas letras por asteriscos
  9.         LoggerMessage.message = message.replaceAll("(?s).", "*");
  10.     }
  11. }

Esta clase es el interceptor. El método con la anotación @AroundInvoke se ejecutará automáticamente cuando se detecte una llamada al método que intercepta.

El mensaje de log, debe estar en una clase para poderse interceptar:

Código Java:
Ver original
  1. public class LoggerMessage {
  2.     public String message;
  3. }

Y aquí cómo la usuarias. Esta es una clase.

Código Java:
Ver original
  1. String password = "AxBj3xk92$//";
  2. LoggerMessage.message = password; // hasta aquí vale 'AxBj3xk92$//'
  3. this.log("La contraseña es: " + LoggerMessage);
  4.  
  5. ...
  6.  
  7. // método que hace en log y es interceptado
  8. @LoggingInterceptor
  9. public void log(String message) {
  10.     logger.log(message); // aquí ya vale '************'
  11. }

Te servirá tanto si usas un servidor de aplicaciones o no. Si es una aplicación de escritorio, debes de agregar la librería weld (implementación de CDI) para poder hacer uso de los interceptores. Esto deberías hacerlo al principio de todo.

Código Java:
Ver original
  1. // inicia el contenedor CDI
  2. Weld weld = new Weld();
  3. WeldContainer container = weld.initalize();


Además, en el web.xml (debe estar dentro de META-INF), debe ir declarado el interceptor:

Código XML:
Ver original
  1. <interceptors>
  2.     <class>ruta.a.tu.paquete.LoggingInterceptor</class>
  3. </interceptors>