Avec le développement d'Internet, de plus en plus d'applications nécessitent un contrôle de sécurité. Spring Security est un framework open source qui fournit des fonctionnalités d'authentification et d'autorisation qui peuvent être intégrées à diverses applications Java. Cet article explique comment utiliser Spring Security pour le contrôle de sécurité dans le développement d'API Java.
1. Qu'est-ce que Spring Security
Spring Security est un framework d'extension pour le contrôle de sécurité dans le framework Spring. Il fournit certaines fonctions de sécurité courantes, telles que l'authentification des utilisateurs, l'autorisation et la protection contre les attaques courantes. Spring Security s'appelait Acegi Security à ses débuts et a été développé par Acegi Technology. Il a ensuite été acquis par SpringSource (maintenant VMware) et est devenu un projet open source de SpringSource. Spring Security est extensible et flexible et peut être utilisé avec plusieurs méthodes d'authentification (telles que basées sur des formulaires, CAS, LDAP, OpenID, etc.). Dans cet article, nous présenterons les méthodes d'authentification basées sur des formulaires.
2. Principes de base de Spring Security
Spring Security implémente un contrôle de sécurité basé sur la technologie Servlet et Filter. Il intercepte les demandes des clients via la chaîne de filtrage, les authentifie et les autorise. Le filtre le plus couramment utilisé dans Spring Security est DelegatingFilterProxy, qui peut transmettre les demandes des clients au FilterChainProxy de Spring Security pour traitement. FilterChainProxy de Spring Security est responsable de la sélection de la FilterChain correspondante pour le traitement en fonction des règles de correspondance de l'URL de la demande. Chaque FilterChain contient un ensemble de filtres, et chaque filtre est chargé d'effectuer des opérations de contrôle de sécurité spécifiques, telles que l'authentification d'identité, l'autorisation, la prévention des attaques CSRF, etc.
3. Configuration de Spring Security
Ce qui suit est un exemple d'utilisation du fichier de configuration Spring Security :
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER") .and() .withUser("admin").password("{noop}password").roles("USER", "ADMIN"); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() .and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login"); } }
Le fichier de configuration ci-dessus définit deux noms d'utilisateur et mots de passe, ainsi que les rôles correspondants. Parmi eux, {noop} signifie utiliser le stockage de mots de passe en texte brut. Dans le développement actuel, il est recommandé d'utiliser des algorithmes de cryptage pour crypter et stocker les mots de passe. Pour l'authentification et l'autorisation, nous pouvons utiliser la méthode authorizeRequests pour la configuration. Dans la configuration ci-dessus, les demandes d'accès à /admin/** ne sont accessibles qu'aux utilisateurs dotés du rôle ADMIN. Pour toute autre demande, seule une authentification est requise. Spring Security fournit également une fonction d'authentification par formulaire. Nous la configurons en appelant la méthode formLogin et utilisons la méthode de déconnexion pour implémenter la fonction de déconnexion.
4. Utilisez Spring Security pour l'authentification et l'autorisation
Ce qui suit est un exemple de code qui inclut l'authentification et l'autorisation :
@RestController @RequestMapping("/api") public class ApiController { @GetMapping("/hello") public String hello() { return "Hello, world!"; } @GetMapping("/admin") public String admin() { return "Welcome, admin!"; } }
Le code ci-dessus contient une API Hello World et une API qui nécessite des privilèges d'administrateur. Pour utiliser Spring Security afin d'effectuer un contrôle de sécurité sur ces API, nous devons créer une classe qui hérite de WebSecurityConfigurerAdapter et implémenter la méthode configure :
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/api/admin").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER") .and() .withUser("admin").password("{noop}password").roles("USER", "ADMIN"); } }
Dans le code ci-dessus, nous avons utilisé la méthode inMemoryAuthentication de Spring Security pour créer deux utilisateurs, l'un utilisant USER. Rôles, on utilise les rôles ADMIN et USER. Dans la méthode configure, nous utilisons la méthode authorizeRequests pour configurer l'API /api/admin afin d'autoriser uniquement l'accès aux utilisateurs dotés du rôle ADMIN, et utilisons anyRequest pour configurer que toute autre demande nécessite une authentification. Enfin, nous configurons la fonctionnalité d'authentification par formulaire à l'aide de la méthode formLogin.
Après avoir utilisé la configuration ci-dessus, lorsque l'utilisateur accède à une API qui nécessite une authentification d'identité, Spring Security sera redirigé vers une page de connexion par défaut. Après avoir entré le nom d'utilisateur et le mot de passe corrects, il peut obtenir une autorisation et accéder à l'API qui nécessite une autorisation. API.
5. Résumé
Cet article présente comment utiliser Spring Security pour le contrôle de sécurité dans le développement d'API Java et explique en détail les principes de base, la configuration et l'utilisation de Spring Security. Spring Security est un cadre de sécurité puissant, facile à utiliser, flexible et extensible qui fournit des fonctions complètes d'authentification et d'autorisation d'identité pour les applications Java. Il mérite une étude et une application approfondies par les programmeurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!