Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
web:framework:spring:security [2023/12/05 10:33] – [defense in depth] jcheron | web:framework:spring:security [2023/12/05 12:12] (Version actuelle) – [Déclaration du service] jcheron | ||
---|---|---|---|
Ligne 167: | Ligne 167: | ||
public void encodePassword(User user) { | public void encodePassword(User user) { | ||
user.setPassword(pEncoder.encode(user.getPassword())); | user.setPassword(pEncoder.encode(user.getPassword())); | ||
- | } | ||
- | |||
- | public User createUser(String login, String password) { | ||
- | User user = new User(); | ||
- | user.setLogin(login); | ||
- | user.setPassword(password); | ||
- | encodePassword(user); | ||
- | user.setRole(getRole(" | ||
- | return uRepo.save(user); | ||
} | } | ||
} | } | ||
Ligne 230: | Ligne 221: | ||
Ne pas oublier de hasher le password User avant création : | Ne pas oublier de hasher le password User avant création : | ||
- | < | + | < |
- | @Controller | + | @Service |
- | class InitController | + | public |
- | @Autowired | + | |
- | lateinit var dbUserService: | + | |
- | | + | |
- | lateinit var userRepository: | + | |
- | | + | |
- | lateinit var roleRepository: | + | |
- | + | user.setLogin(login); | |
- | @RequestMapping("/ | + | user.setPassword(password); |
- | fun createUser(@PathVariable username:String): | + | |
- | | + | user.setRole(getRole("ROLE_USER")); |
- | user.username=username | + | |
- | user.email=username.lowercase()+" | + | |
- | user.role=" | + | |
- | user.password="1234" | + | |
- | (dbUserService as DbUserService).encodePassword(user) | + | |
- | | + | |
- | return " | + | |
} | } | ||
} | } | ||
</ | </ | ||
+ | === Récupération Utilisateur connecté === | ||
+ | Récupération de l' | ||
+ | |||
+ | <sxh java> | ||
+ | @ControllerAdvice | ||
+ | public class MainAdvice { | ||
+ | @ModelAttribute(" | ||
+ | public User activeUser(Authentication auth) { | ||
+ | return (auth == null) ? null : (User) auth.getPrincipal(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
==== Login form personnalisée ==== | ==== Login form personnalisée ==== | ||
Ligne 269: | Ligne 263: | ||
Ajouter une route pour le **login** | Ajouter une route pour le **login** | ||
- | < | + | < |
- | class AppConfig | + | @Configuration |
- | | + | public |
- | registry.addViewController("/ | + | |
+ | | ||
+ | public void addViewControllers(ViewControllerRegistry | ||
+ | registry.addViewController("/ | ||
} | } | ||
} | } | ||
Ligne 279: | Ligne 276: | ||
Modifier la configuration dans **WebSecurityConfig** : | Modifier la configuration dans **WebSecurityConfig** : | ||
- | < | + | < |
@Configuration | @Configuration | ||
@EnableWebSecurity | @EnableWebSecurity | ||
- | @EnableMethodSecurity( | ||
- | prePostEnabled = true, proxyTargetClass = true | ||
- | ) | ||
public class WebSecurityConfiguration { | public class WebSecurityConfiguration { | ||
Ligne 341: | Ligne 335: | ||
static RoleHierarchy roleHierarchy() { | static RoleHierarchy roleHierarchy() { | ||
RoleHierarchyImpl hierarchy = new RoleHierarchyImpl(); | RoleHierarchyImpl hierarchy = new RoleHierarchyImpl(); | ||
- | hierarchy.setHierarchy(" | + | hierarchy.setHierarchy(" |
return hierarchy; | return hierarchy; | ||
} | } | ||
Ligne 381: | Ligne 375: | ||
) | ) | ||
.permitAll(); | .permitAll(); | ||
- | req.requestMatchers(AntPathRequestMatcher.antMatcher("/ | + | req.requestMatchers(AntPathRequestMatcher.antMatcher("/ |
req.requestMatchers(AntPathRequestMatcher.antMatcher("/ | req.requestMatchers(AntPathRequestMatcher.antMatcher("/ | ||
req.requestMatchers(AntPathRequestMatcher.antMatcher("/ | req.requestMatchers(AntPathRequestMatcher.antMatcher("/ | ||
Ligne 394: | Ligne 388: | ||
^Méthode ^ Description ^ | ^Méthode ^ Description ^ | ||
| 1 - **permitAll** | Pas de sécurisation sur les urls commençant par **/css**, **/ | | 1 - **permitAll** | Pas de sécurisation sur les urls commençant par **/css**, **/ | ||
- | | 2 - **hasRole** | Les utilisateurs ayant le rôle **ROLE_ADMIN** peuvent accéder aux urls commençant par **/admin**. | | + | | 2 - **hasRole** | Les utilisateurs ayant le rôle **ADMIN** peuvent accéder aux urls commençant par **/admin**. | |
| 3 - **hasAuthority** | Les utilisateurs ayant l' | | 3 - **hasAuthority** | Les utilisateurs ayant l' | ||
| 4 - **hasAnyAuthority** | Les utilisateurs ayant l'une des authorities **USER**, **ADMIN** ou **MANAGER** peuvent accéder aux urls commençant par **/staff**. | | | 4 - **hasAnyAuthority** | Les utilisateurs ayant l'une des authorities **USER**, **ADMIN** ou **MANAGER** peuvent accéder aux urls commençant par **/staff**. | | ||
Ligne 491: | Ligne 485: | ||
La protection csrf est activée par défaut dans **Spring security** | La protection csrf est activée par défaut dans **Spring security** | ||
</ | </ | ||
+ | |||
+ | Mettre éventuellement une exception pour la console H2 (mais la console H2 n'a aucune raison d' | ||
+ | |||
+ | <sxh java; | ||
+ | req.csrf(csrf-> | ||
+ | </ | ||
=== Intégration dans les vues === | === Intégration dans les vues === | ||
Ligne 512: | Ligne 512: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | |||
+ | <wrap important> | ||