English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Framework dans Spring 3.1Dans Spring Security, la prise en charge de la configuration Java a été ajoutée dans Spring Security 3.2Dans laquelle nous pouvons configurer Spring Security Sans avoir à écrire une ligne de XML.
Dans ce cas, nous allons créer un exemple qui implémente Spring Security, sans utiliser de configuration XML. Voici les étapes suivantes :
La première étape consiste à créer une configuration Java pour Spring Security. Voici une configuration Java de base simple.
WebSecurityConfig.java
package com.w3codebox; import org.springframework.context.annotation.*; //import org.springframework.security.config.annotation.authentication.builders.*; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.*; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @EnableWebSecurity @ComponentScan("com.w3codebox") public class WebSecurityConfig implements WebMvcConfigurer { @Bean public UserDetailsService userDetailsService() throws Exception { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withDefaultPasswordEncoder().username("w3codebox"). password("java123").roles("USER").build()); return manager; } protected void configure(HttpSecurity http) throws Exception { http .antMatcher("/) .authorizeRequests() .anyRequest().hasRole("ADMIN") .and() .httpBasic(); } }
Cette configuration crée une configuration appelée springSecurityFilterChain du filtre de Servlet. ResponsableProtéger l'URL de l'application, vérifier le nom d'utilisateur et le mot de passe soumis, rediriger vers le formulaire de connexion, etc.
La configuration Java ci-dessus effectue les opérations suivantes pour notre application.
Exiger l'authentification pour chaque URL Créer un formulaire de connexion Permettre aux utilisateurs d'utiliser l'authentification basée sur le formulaire pour s'authentifier Permettre la déconnexion Prévenir les attaques CSRF l'intégration des en-têtes de sécurité
Maintenant, nous allons enregistrer à la guerre springSecurityFilterChain Pour l'enregistrement, Spring Security fournit la classe de base à étendre, AbstractSecurityWebApplicationInitializer.
Pour une application Spring MVC, SecurityWebApplicationInitializer est présentée comme suit.
SecurityWebApplicationInitializer.java
package com.w3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
Ce code enregistrera springSecurityFilterChain pour chaque URL de notre application.
Maintenant, chargez WebSecurityConfig dans notre ApplicationInitializer existant et ajoutez-le à la méthode getRootConfigClasses().
MvcWebApplicationInitializer.java
package com.w3codebox; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] { WebSecurityConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { // TOdo Auto-méthode de prototype générée return null; } @Override protected String[] getServletMappings() { return new String[] { "/"}; } }
WebSecurityConfigurerAdapter La classe fournit une méthode configure(HttpSecurity http) qui contient les configurations par défaut suivantes. Les définitions par défaut sont indiquées comme suit.
protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); }
Il est similaire au XML donné.
<http <intercept-url pattern="/**" access="authenticated"/> <form-login /> <http-basic /> </http>
Cette méthode effectue les opérations suivantes.
Il assure que chaque demande faite par l'utilisateur nécessite une authentification Il permet à l'utilisateur de s'authentifier en utilisant la connexion de login basée sur le formulaire Il permet à l'utilisateur de s'authentifier en utilisant l'authentification HTTP Basic
Créer un contrôleur pour gérer les demandes utilisateur.
HomeController.java
package com.w3codebox.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class HomeController { @RequestMapping(value="/", method=RequestMethod.GET) public String index() { return "index"; } }
Nous avons une page de vue (.jsp) index.jsp contenant le code source suivant.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Page d'accueil</title> </head> <body> Bienvenue à la page d'accueil ! </body> </html>
Notre projet complet est présenté comme suit.
Sortie:
Nous avons une seule action dans le contrôleur, et seuls les utilisateurs authentiques peuvent y accéder. Par conséquent, lorsque nous exécutons l'application, elle vous demande de saisir les informations de connexion. La sortie est donnée ci-dessous.
C'est Page de connexion par défaut fournie par Spring SecurityPage, nous ne l'avons pas créée. Bien que nous puissions créer notre propre page de connexion et configurer l'application. Nous en parlerons dans le prochain sujet.
Maintenant, fournissez les informations de connexion pour accéder aux ressources de l'application. Spring Security vérifie les informations de connexion et assure l'authenticité de l'utilisateur.
Voyons ce qui se passe ? Si nous entrons des informations de connexion incorrectes.
Un événement est déclenché après avoir cliqué sur le bouton de connexion Mauvaises informations de connexion (Informations de connexion incorrectes) erreur.
Maintenant, utilisez Connexion avec les informations correctes./strong>
Ces informations de connexion correspondent et affichent la page d'accueil (index.jsp).