Bonjour.
Pour la gestion de la Persistence j'utilise l'annotation @Autowired et tout fonctionne très bien.
J'ai des Services :
Des Dao :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Service public class MonService implements InterfaceDeMonService{ @Autowired private MonDao dao; @Override @Transactional (readOnly=true) public JSONObject methodeService() { dao.methodeDao();
Et ça fonctionne dans les Contrôleurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 @Repository public class MonDao implements InterfaceDeMonDao{ @PersistenceContext private EntityManager entityManager; @Override public JSONArray methodeDao() { Query query = entitManager.createQuery(...
Là ça marche sans problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 @Controller public class AdminController { @Autowired private MonService service; @RequestMapping("/page/que/je/veux") public @ResponseBody ModelAndView page() { service.methodeService();
Mais si ailleurs j'essaie de récupérer le même service avec @Autowired, j'ai un message d'erreur :
Là en l’occurrence c'est dans la classe qui extends WebSecurityConfigurerAdapter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'NomDeLaClasse': Unsatisfied dependency expressed through field 'service': No qualifying bean of type [com.MonService] found for dependency
Mais au pire si ça ne fonctionne pas là, ce n'est pas grave, j'en ai pas besoin pour l'instant.
Par contre j'ai voulu avoir des propriétés personnalisées avec :
principal.username fonctionne sans problème, mais j'ai voulu en avoir d'autre comme principal.email par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <sec:authentication property="principal.username" />
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired DataSource dataSource; @Override protected void configure(HttpSecurity http) throws Exception { http.authenticationProvider(new CustomAuthenticationProvider());
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class CustomAuthenticationProvider implements AuthenticationProvider { public Authentication authenticate(Authentication authentication) throws AuthenticationException { Authentication auth = null; ApplicationUser appUser = new ApplicationUser(...); auth = new UsernamePasswordAuthenticationToken(appUser, password, grantedAuths); return auth; }Dans la classe qui extends WebSecurityConfigurerAdapter, il y a une méthode protected void configure(HttpSecurity http), dans cette méthode j'utilise mon propre AuthentificationProvider : http.authenticationProvider(new CustomAuthenticationProvider());, la classe CustomAuthentificationProvider possède une instance de classe qui extends User.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class ApplicationUser extends User { public String getEmail() { return email; }
Le bon côté c'est que depuis le jsp je peux faire principal.email et ça marche.
Par contre je ne peux pas avoir accès au service qui gère la persistance pour faire des requêtes dans la base de données...
Là j'ai même pas de message d'erreur c'est juste complètement ignoré.
Si vous avez des conseils, des idées, merci de m'en faire part.
Merci d'avance.
Bonne journée.
Cordialement.
=====
EDIT : J'ai rajouté l'annotation @Component dans ma classe CustomAuthenticationProvider et je retrouve la même erreur.
Dans les contrôleurs @Autowired fonctionne mais pas dans la configuration...
Partager