J'utilise Jersey 1.4 ea avec Spring 3.0 et l'intégration jersey-spring
. L'intégration de Jersey et Spring fonctionne correctement pour les classes de ressources, comme décrit here. Comment jamais je veux injecter un composant de ressort dans un ContainerRequestFilter pour faire un pré-traitement des demandes.Jersey: Injecter le composant Spring dans 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
}
}
Le filtre et le bean du gestionnaire d'utilisateurs sont enregistrés lorsque je déploie l'application sur Glassfish. Je me demande ce que je fais mal. Existe-t-il un moyen d'injecter un bean géré par ressort dans un ContainerRequestFilter?
UPDATE
Type de résoudre. Le problème est que Jersey n'obtient pas de beans Spring si ces beans sont des proxies Java (par opposition aux classes proxy générées). Le problème peut être résolu en demandant à Spring d'utiliser TOUJOURS les classes de proxy au lieu de Java Proxies en spécifiant l'attribut proxy-target-class="true"
dans les parties respectives d'une configuration de ressort. Dans mon scénario, je devais le spécifier sur un <tx:annotation-driven proxy-target-class="true" />
. Pour une analyse plus détaillée et une solution possible, voir here.
Dans votre solution, comment SecurityFilter a été enregistré dans le fichier web.xml ou ailleurs? J'ai un problème ici https://stackoverflow.com/q/45509183/4636715 dans lequel le ContainerRequestFilter n'est pas visité du tout. – vahdet