Estoy tratando de inyectar un grano de primavera en un filtro, pero no puedo hacerlo funcionar.Spring y @Autowired en DelegatingFilterProxy
El bean inyectado siempre es "nulo". Tengo éxito en autoverificar este mismo bean en Controladores y HandlerInterceptors, por lo que está anotado correctamente.
La clase de filtro está debajo del mismo paquete base del resto de los Controladores.
Esta es la parte relevante de mi web.xml
<filter>
<filter-name>CheckSession</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>CheckSession</filter-name>
<url-pattern>/panel/*</url-pattern>
</filter-mapping>
Este es el código para el filtro
@Component
public class CheckSession extends OncePerRequestFilter implements Filter {
@Autowired private Usuario usuario;
@Override
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
// always null
System.out.println("autowired " + usuario);
chain.doFilter(request, response);
}
}
El filtro está provocando en cada petición.
Estas son las anotaciones en el frijol "Usuario"
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Usuario implements java.io.Serializable { ... }
¿Qué me falta? ¡Gracias!
no deben ¿Usas tu nombre de clase exacto en 'filter-class'? ¿Y está seguro de que su filtro está gestionado por Spring? ¿No deberías usar @Configurable aquí? – skegg99
El nombre del filtro es CheckSession, el mismo que se indica en "nombre-filtro". Si cambio ese nombre en "filtro-nombre" obtengo una "NoSuchBeanDefinitionException" de Spring. Así que supongo que sí, el filtro está siendo administrado por Spring (a través de DelegatingFilterProxy) pero el mecanismo de autowire aún no funciona ...:( – metacortechs