English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Security fournit son propre module intégré de connexion pour l'authentification des utilisateurs. Il vérifie les informations d'identification de l'utilisateur et accorde l'accès à l'application.
Le module présente une page de connexion intégrée. Par conséquent, nous n'avons pas besoin de créer une nouvelle page JSP. Mais si nous devons personnaliser la page de connexion, que devons-nous faire ?
La réponse est, nous pouvons créer notre propre page de connexion JSP et la intégrer à l'application. Dans ce sujet, nous créerons une page de connexion personnalisée et l'utiliserons pour se connecter.
Voyez l'exemple. Créez un projet Maven en fournissant les détails suivants.
Une fois terminé, il créera la structure de projet suivante.
Configurez le projet pour appliquer la sécurité Spring. Il nécessite les quatre fichiers suivants. Créez un paquet com.w3codebox et mettez ces fichiers à l'intérieur.
//AppConfig.java
package com.w3codebox; 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.w3*" }) 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
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-généré stub de méthode return null; } @Override protected String[] getServletMappings() {}} return new String[] { "/" }; } }
//SecurityWebApplicationInitializer.java
package com.w3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
//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.*; //import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @EnableWebSecurity @ComponentScan("com.w")3codebox") public class WebSecurityConfig extends WebSecurityConfigurerAdapter {} @Bean public UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withDefaultPasswordEncoder() .username("irfan").password("khan123").roles("ADMIN").build()); return manager; } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests(). antMatchers("/index", "/user","/").permitAll() .antMatchers("/admin").authenticated() .and() .formLogin() .loginPage("/login) .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout"); } }
Voir, dans la méthode configure, après formLogin(), utiliser la méthode loginPage("/login). C'est la méthode réelle nécessaire pour appeler la page de connexion personnalisée.
Tout d'abord, créons notre propre page de connexion. Selon les dires des officiers de Spring, la page de connexion devrait être comme suit.
//login.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:url value="/login" var="loginUrl"/> <form action="${loginUrl}" method="post"> <c:if test="${param.error != null}"> p> Nom d'utilisateur et mot de passe non valides. </p> </c:if> <c:if test="${param.logout != null}"> p> Vous avez été déconnecté. </p> </c:if> p> <label for="username">Username</label>/label> <input type="text" id="username" name="username"/> </p> p> <label for="password">Password</label>/label> <input type="password" id="password" name="password"/> </p> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <button type="submit" class="btn">Log in</button>/button> </form>
//index.jsp
<html> <head> <title>Home Page</title>/title> </head> <body> <h3> <br> Bienvenue sur w3codebox! <br> </h3> <a href="admin">Login here</a>/a> </body> </html>
//admin.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Home Page</title>/title> </head> <body> Login Successful! <a href="logout">logout</a>/a> </body> </html>
Dans com.w3Dans le paquet codebox.controller, créer un contrôleur HomeController.
//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"; } @RequestMapping(value="/login", method=RequestMethod.GET) public String login() { return "login"; } @RequestMapping(value="/admin", method=RequestMethod.GET) public String admin() { return "admin"; } }
//pom.xml
<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>springcustomlogin</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/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId>/groupId> <artifactId>javax.servlet</artifactId>-api/artifactId> <version>3.1.0/version> <scope>provided</scope>/scope> </dependency> <dependency> <groupId>javax.servlet</groupId>/groupId> <artifactId>jstl</artifactId>/artifactId> <version>1.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId>/groupId> <artifactId>maven-war-plugin>/artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml>/failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
Notre projet est présenté comme suit:
Sortie:
Maintenant, connectez-vous en fournissant les informations d'identification de l'utilisateur.
Voyez, cela fonctionne correctement. Maintenant, nous pouvons créer des décorations plus décoratives et personnalisées selon notre besoin.