English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

基于Spring security表单的身份验证

基于表单的身份验证是一种通过登录表单完成用户身份验证的方式。该表单是内置的,由Spring security框架提供。

HttpSecurity类提供了formLogin()方法,该方法负责呈现登录表单并验证用户凭据。

在本教程中,我们将创建一个实现基于表单的身份验证的示例。让我们开始示例。

创建Maven项目

首先通过提供项目详细信息来创建Maven项目。



该项目最初看起来像这样:



Spring Security配置

通过使用以下Java文件在应用程序中配置spring安全性。创建一个包 com.w3codebox 并将所有文件放入其中。

//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.w"3*" })  
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-generated method stub  
        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 {  
    }

//WebSecuiryConfig.java

package com.w3codebox;
import org.springframework.context.annotation.*;    
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.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;  
@EnableWebSecurity  
@ComponentScan("com.w3codebox)  
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {  
  @Bean  
  public UserDetailsService userDetailsService() {  
      InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();  
      manager.createUser(User.withDefaultPasswordEncoder()
      .username("admin").password("admin123).roles("ADMIN").build());  
      return manager;  
  }  
  @Override  
  protected void configure(HttpSecurity http) throws Exception {}}  
      http.authorizeRequests().
      antMatchers("/index", "/user","/").permitAll()
      .antMatchers(")/admin").authenticated()
      .and()
      .formLogin() // Il rend un formulaire de connexion 
      .and()
      .logout()
      .logoutRequestMatcher(new AntPathRequestMatcher(")/logout");     
  }  
}

contrôleur

Créez un contrôleur HomeController et mettez-le dans com.w3codebox.controller dans le paquet. Il contient le code suivant.

//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 \  
        }  
        @RequestMapping(value=")/admin", method=RequestMethod.GET)  
        public String admin() {  
              
            return \  
        }  
    }

vues

Ce projet contient les deux vues suivantes (pages JSP). Mettez-les dans WEB-INF/views dans le dossier.

//index.jsp

<html>  
<head>    
<title>Page d'accueil</title>  
</head>  
<body>  
Bienvenue dans w3codebox! 


<a href="admin">Admin login</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: green;">connexion réussie!</span>
<a href="logout">Déconnexion</a>
<hr>
    <h3>Bienvenue Admin</h3>  
</body>  
</html>

Dépendances du projet

//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>springsecurity</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>  
    <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>  
</dependencies>  
  <build>  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins/groupId>  
            <artifactId>maven-war-plugin/artifactId>  
            <version>2.6</version>  
            <configuration>  
                <failOnMissingWebXml>false</failOnMissingWebXml>/failOnMissingWebXml>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>  
</project>

Structure du projet

Après avoir ajouté tous ces fichiers, la structure du projet sera comme suit:



Exécutez le serveur

Exécutez l'application sur le serveur et vous verrez qu'elle génère le suivant pour le navigateur.

Sortie:



Cliquez sur le lien, un formulaire de connexion s'affichera, qui sera utilisé pour l'authentification basée sur le formulaire.



Après vérification des credentials, l'identité de l'utilisateur sera vérifiée et affichée sur la page d'administration.