Estoy usando Jersey 1.4 ea junto con Spring 3.0 y la integración jersey-spring
. Integrar Jersey y Spring funciona bien para clases de recursos como se describe en here. Como quiera que quiera inyectar un componente de resorte en un ContainerRequestFilter para hacer un preprocesamiento de solicitudes.Jersey: Inyecte el componente Spring en ContainerRequestFilter
@Component
public class SecurityFilter implements ContainerRequestFilter {
// UserManager is a declared spring component
// Injecting it should work somehow
@Autowired
private UserManager userManager;
@Override
public ContainerRequest filter(ContainerRequest request) {
System.out.println(userManager);
// prints out null on request
}
}
Tanto el filtro como el administrador de usuarios se registran al implementar la aplicación en Glassfish. Me pregunto qué estoy haciendo mal. ¿Hay alguna forma de inyectar un frijol administrado por la primavera en un ContainerRequestFilter?
ACTUALIZACIÓN
tipo de solución. El problema es que Jersey no obtiene Spring beans si estos beans son proxies de Java (se oponen a las clases proxy generadas). El problema puede resolverse ordenando a Spring que SIEMPRE use clases de proxy en lugar de Java Proxies especificando el atributo proxy-target-class="true"
en las partes respectivas de una configuración de resorte. En mi caso, tuve que especificarlo en un <tx:annotation-driven proxy-target-class="true" />
.
Consulte here para un análisis más detallado y una posible solución a eso.
En su solución, ¿cómo se ha registrado SecurityFilter en el archivo web.xml o en otro lugar? Tengo un problema aquí https://stackoverflow.com/q/45509183/4636715 en el que ContainerRequestFilter no se visita en absoluto. – vahdet