Sto utilizzando Jersey 1.4 EA insieme a Spring 3.0 e l'integrazione jersey-spring
. L'integrazione di Jersey e Spring funziona bene per le classi di risorse come descritto in here. Come mai voglio iniettare un componente a molla in un ContainerRequestFilter per fare un po 'di pre-elaborazione delle richieste.Jersey: Inject Spring component into 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
}
}
Sia il filtro e il manager di fagioli utente sono registrati quando ho implementare l'applicazione su Glassfish. Mi chiedo cosa sto sbagliando. C'è un modo per iniettare un bean gestito a primavera in un ContainerRequestFilter?
UPDATE
Tipo di risolto. Il problema è che Jersey non ottiene i bean Spring se questi bean sono proxy Java (opposti alle classi proxy generate). Il problema può essere risolto istruendo Spring a SEMPRE utilizzare le classi proxy anziché i proxy Java specificando l'attributo proxy-target-class="true"
nelle rispettive parti di una configurazione a molla. Nel mio scenario ho dovuto specificarlo su un <tx:annotation-driven proxy-target-class="true" />
.
Vedere here per un'analisi più dettagliata e una possibile correzione su quello.
Nella vostra soluzione, in che modo SecurityFilter è stato registrato nel file web.xml o da qualche altra parte? Ho un problema qui https://stackoverflow.com/q/45509183/4636715 in cui ContainerRequestFilter non viene visitato affatto. – vahdet