Sto provando a iniettare un bean spring in un filtro, ma non riesco a farlo funzionare.Spring e @Autowired su DelegatingFilterProxy
Il bean iniettato è sempre "null". Riesco ad automatizzare lo stesso bean in Controllers and HandlerInterceptors, quindi è correttamente annotato.
La classe di filtro è sotto lo stesso pacchetto base del resto dei controller.
Questa è la parte rilevante del mio 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>
Questo è il codice per il 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);
}
}
Il filtro è trigger su ogni richiesta.
Queste sono le annotazioni nel "Usuario" fagiolo
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Usuario implements java.io.Serializable { ... }
Cosa mi manca? Grazie!
shouldn stai usando il tuo esatto nome di classe in "filtro-classe"? E sei sicuro che il tuo filtro sia gestito da Spring? Non dovresti usare @Configurable qui? – skegg99
Il nome del filtro è CheckSession, lo stesso indicato in "nome-filtro". Se cambio quel nome in "nome-filtro" ottengo un "NoSuchBeanDefinitionException" da Spring. Quindi suppongo di sì, il filtro è gestito da Spring (tramite DelegatingFilterProxy) ma il meccanismo di autowire continua a non funzionare ...:( – metacortechs