Bonjour,
J'utilise Spring Security et la partie annotations sur les méthodes pour gérer les autorisations sur mon application.
J'ai une couche service qui est abstraite et utilise les Generics. Ma classe s'appelle AbstractBOImpl. Ci-joint un exemple de méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public void saveEntities(List<T> added, List<T> modified, List<T> removed) { for (T entity : added) { create(entity); } for (T entity : modified) { update(entity); } for (T entity : removed) { delete(entity); } }Si je veux gérer les autorisations pour chaque type de bean que j'utilise, je dois surcharger les méthodes en questions. Prenons comme exemple la méthode delete() de ma classe LibraryBOImpl, qui étend AbstractBOImpl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void delete(T entity) { getDAO().delete(entity); }
En mettant mon annotation sur la méthode delete, je me suis dit que Spring Security allait la prendre en compte. Or ça n'est pas le cas, et ceci je pense parce que la méthode delete n'est pas mon "point d'entrée" dans la classe Abstraite. La méthode delete est appelée dans ma méthode "point d'entrée", est définie dans ma classe abstraite, mais est surchargée dans la classe fille. Je me demande si Java ne se base pas sur la signature de la classe abstraite, et surcharge seulement le body avec celui de la classe fille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Override @Secured("LIB_D") public void delete(Library entity) { super.delete(entity); }
Je dis ça car si je surcharge la méthode saveEntities et que je l'annote @Secured, l'interceptor de Spring Security fonctionne. Mais bon vous comprenez que ça ne suffit pas à répondre au niveau de finesse d'autorisation que je souhaite...
Quelqu'un peut confirmer mon analyse ?
Merci![]()
Partager