English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En plus de l'authentification, Spring Security vérifie également l'autorisation de l'utilisateur connecté. Après la connexion, l'accès aux ressources de l'utilisateur sera autorisé en fonction de son RÔLE.
Lors de la création d'un utilisateur dans la classe WebSecurityConfig, nous pouvons également spécifier le RÔLE de l'utilisateur.
La sécurité appliquée à la méthode est limitée aux utilisateurs non autorisés et ne permet qu'aux utilisateurs réels.
Laissons-voir un exemple. Premièrement, créez un projet Maven en fournissant des détails.
Ce projet semble initialement ainsi:
Maintenant, configurez l'application pour empêcher les utilisateurs non autorisés et non authentifiés. Il nécessite les quatre fichiers Java suivants, créez un paquet com.w3codebox et le placer à l'intérieur.
//AppConfig.java
Cette classe est utilisée pour définir les préfixes et suffixes des vues avec l'aide du résolveur de vue.
package com.w;3codebox; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @EnableWebMvc @Configuration @ComponentScan({ "com.w3codebox.controller.*" }) public class AppConfig { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; } }
//MvcWebApplicationInitializer.java.java
package com.w;3codebox; 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-generated method stub return null; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
//SecurityWebApplicationInitializer.java
package com.w;3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
//WebSecurityConfig.java
Cette classe est utilisée pour créer des utilisateurs et définir leur authentification. Chaque fois qu'un utilisateur souhaite accéder à l'application, il doit se connecter.
package com.w;3codebox; import org.springframework.context.annotation.*; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.*; import org.springframework.security.core.userdetails.*; import org.springframework.security.core.userdetails.User.UserBuilder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @EnableWebSecurity @ComponentScan("com.w")3codebox") @EnableGlobalMethodSecurity(prePostEnabled=true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public UserDetailsService userDetailsService() {}} // s'assurer que les mots de passe sont correctement codés UserBuilder users = User.withDefaultPasswordEncoder(); InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(users.username("irfan").password("user123").roles("USER").build()); manager.createUser(users.username("admin").password("admin123").roles("ADMIN").build()); return manager; } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests(). antMatchers("/index","/").permitAll() .antMatchers("/admin","/user .and() .formLogin() .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout")); } }
créer le contrôleur HomeController et le placer dans com.w3codebox.controller dans le paquet.
//HomeController.java;
package com.w;3codebox.controller; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HomeController { @RequestMapping(value="/, method=RequestMethod.GET) public String index() { return "index"; } @RequestMapping(value="/user, method=RequestMethod.GET) public String user() { return "admin"; } @RequestMapping(value="/admin, method=RequestMethod.GET) public String admin() { return "admin"; } // Seul une personne ayant le rôle ADMIN peut accéder à cette méthode. @RequestMapping(value="/update, method=RequestMethod.GET) @ResponseBody @PreAuthorize("hasRole('ROLE_ADMIN')") public String update() { return "record mis à jour "; } }
Créez les vues suivantes (pages JSP) pour générer des sorties pour les utilisateurs. Mettez toutes les vues dans WEB-INF/views dossier.
//index.jsp
<html> <head> <title>Page d'accueil</title> </head> <body> Bienvenue sur w3codebox! <br> <br> Se connecter en tant que: <a href="admin">Admin</a> <a href="user">Utilisateur</a> </body> </html>
//admin.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Page d'accueil</title> </head> <body> <span style="color: vert" >Connexion réussie !</span> ? <a href="logout" style="text-decoration: none;">déconnexion</a> <br> <br> <a href="update" style="text-decoration: none;">Mettre à jour l'enregistrement</a> </body> </html>
Voici les dépendances nécessaires pour créer ce projet.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.w3codebox</groupId> <artifactId>springmethod</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl<//artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-framework-bom --> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins<//groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false<//failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
Après avoir ajouté tous les fichiers ci-dessus, notre projet est le suivant:
Sortie:
Première connexion en tant qu'ADMIN
Après la connexion,
Cliquez sur Mise à jour des enregistrements,puis vérifiez si les enregistrements ont été mis à jour, car le rôle de l'utilisateur est ADMIN.
Maintenant, connectez-vous en tant qu'utilisateur.
Maintenant, cliquez sur Mise à jour des enregistrements,parce que le rôle de l'utilisateur est USER, le serveur refuse l'accès.