¿Qué son los interceptores en Java EE?

4 minutos de lectura

Avatar de usuario de Umair
Umaír

Estoy tratando de aclarar mi concepto sobre Interceptors en Java EE. He leído la especificación Java EE pero estoy un poco confundido al respecto. Por favor, proporcione algún enlace útil o tutorial que pueda aclarar mi concepto. ¿Cómo, cuándo y por qué usamos interceptores?

Los interceptores se utilizan para implementar aspectos transversales, como el registro, la auditoría y la seguridad, desde la lógica empresarial.

En Java EE 5, los interceptores solo se permitían en EJB. En Java EE 6, Interceptors se convirtió en una nueva especificación propia, resumida en un nivel superior para que pueda aplicarse de manera más genérica a un conjunto más amplio de especificaciones en la plataforma.

Interceptan invocaciones y eventos de ciclo de vida en una clase de destino asociada. Básicamente, un interceptor es una clase cuyos métodos se invocan cuando se invocan métodos comerciales en una clase de destino, se producen eventos del ciclo de vida, como métodos que crean/destruyen el bean, o se produce un método de tiempo de espera de EJB. La especificación CDI define un mecanismo de tipo seguro para asociar interceptores a beans utilizando enlaces de interceptor.

Busque una muestra de código de trabajo en:

https://github.com/arun-gupta/javaee7-samples/tree/master/cdi/interceptors

Java EE 7 también introdujo una nueva anotación @Transactional en la API de transacciones de Java. Esto le permite tener transacciones administradas por contenedor fuera de un EJB. Esta anotación se define como un enlace de interceptor y se implementa mediante el tiempo de ejecución de Java EE. Una muestra de trabajo de @Transactional está en:

https://github.com/arun-gupta/javaee7-samples/tree/master/jta/transaction-scope

Avatar de usuario de Sundararaj Govindasamy
Sundararaj Govindasamy

Los interceptores se utilizan para añadir capacidad AOP a frijoles manejados.

Podemos adjuntar Interceptor a nuestra clase usando la anotación @Interceptor.
Cada vez que se llama a un método en nuestra claseel Interceptor adjunto interceptará la invocación de ese método y ejecutará su método interceptor.

Esto se puede lograr usando la anotación @AroundInvoke (vea el ejemplo a continuación).

Interceptores de métodos

Podemos interceptar eventos del ciclo de vida de una clase (creación de objetos, destrucción, etc.) usando la anotación @AroundConstruct.

Diferencia principal entre interceptor y Filtros de servlets is Podemos usar Interceptor fuera de WebContext, pero los filtros son específicos para las aplicaciones web.

Los usos comunes de los interceptores son el registro, la auditoría y la creación de perfiles.

Para una introducción más detallada, puede leer este artículo.
https://abhirockzz.wordpress.com/2015/01/03/java-ee-interceptors/

avatar de usuario de pantera negra
Pantera negra

Me gusta esta definición: los interceptores son componentes que interceptan llamadas a métodos EJB. Se pueden usar para auditar y registrar a medida que se accede a los EJB.

En otra situación, se pueden usar en una situación en la que necesitamos verificar si un cliente tiene la autoridad o la autorización para ejecutar una transacción en un objeto particular en la base de datos. Bueno, aquí es donde los interceptores son útiles; pueden verificar si el cliente/usuario tiene esa autoridad verificando si puede invocar ese método en ese objeto de base de datos o EJB.

Sin embargo, todavía echaría un vistazo a lo siguiente artículo y lo siguiente tutorial para tener una idea de cómo se utilizan en una configuración/entorno Java EE.

Avatar de usuario de Ruwan Prasad
Ruwan Prasad

Puede usar Interceptor para los lugares donde desea realizar algunas tareas antes de enviar una solicitud a la clase Controlador y antes de enviar una solicitud a una respuesta. Ej: – Piense que desea validar el token de autenticación antes de enviar una solicitud a la clase Controller en este caso, puede usar Intercepters. Código de muestra:

@Component
public class AuthInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse 
response, Object handler) throws Exception {
    //Here you can write code to validate the auth token.
    }
}

¿Ha sido útil esta solución?