[JAVA] Essayez d'implémenter la fonction de connexion avec Spring Boot

Poursuivant l'article précédent [Essayez d'automatiser la migration avec Spring Boot Flyway], essayez d'implémenter le processus de connexion.

build.gradle Ajoutez ** spring-boot-starter-security **.

build.gradle



plugins {
    id 'java'
    id 'org.springframework.boot' version '2.3.1.BUILD-SNAPSHOT'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'com.avast.gradle.docker-compose' version '0.12.1' 
    id 'org.flywaydb.flyway' version '6.4.3'
}

// ...Abréviation

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.flywaydb:flyway-core'
    implementation "org.springframework.boot:spring-boot-starter-security" //ajouter à
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'org.springframework.security:spring-security-test' //ajouter à
}

Créer SecurityConfig.java

Créez dans la même hiérarchie que ** Application **.

SecurityConfig.java



package com.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

import javax.sql.DataSource;

//Classe de paramètre de sécurité
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    //Encodeur de mot de passe
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
     }

    @Autowired
    private DataSource dataSource;

    //Instruction SQL pour obtenir l'utilisateur
    private static final String USER_SQL = "SELECT"
        + " email,"
        + " password,"
        + " true"
        + " FROM"
        + " users"
        + " WHERE"
        + " email = ?";

    //Instruction SQL pour obtenir des autorisations
    private static final String ROLE_SQL = "SELECT"
        + " email,"
        + " role"
        + " FROM"
        + " users"
        + " WHERE"
        + " email = ?";

    @Override
    public void configure(WebSecurity web) throws Exception {

        //N'appliquez pas de sécurité pour accéder aux ressources statiques
        web.ignoring().antMatchers("/resources/**");
    }
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        //Paramètres des pages qui ne nécessitent pas de connexion
        http.authorizeRequests()
            .antMatchers("/resources/**");
            //L'accès à d'autres pages est refusé
            .anyRequest().authenticated();
        
        //Paramètres du formulaire de connexion
        http.formLogin()
            //Nom du paramètre utilisateur
            .usernameParameter("email")
            //Nom du paramètre de mot de passe
            .passwordParameter("password");

        //Désactiver les mesures CSRF
        http.csrf().disable();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        //Obtenir les informations utilisateur de DB pendant le processus de connexion
        auth.jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery(USER_SQL)
            .authoritiesByUsernameQuery(ROLE_SQL)
            .passwordEncoder(passwordEncoder());
    }
}

Modifier R__1_insert_datas.sql

Remplacez le mot de passe par une chaîne codée. La chaîne d'origine est ** passw0rd **.

R__1_insert_datas.sql


INSERT INTO `users` VALUES
    (1,'Yamada','Hanako','[email protected]','$2a$06$hY5MzfruCds1t5uFLzrlBuw3HcrEGeysr9xJE4Cml5xEOVf425pmK',NULL,NOW(),NULL,NULL,NULL,NULL,1),
    (2,'Suzuki','Taro','[email protected]','$2a$06$hY5MzfruCds1t5uFLzrlBuw3HcrEGeysr9xJE4Cml5xEOVf425pmK',NULL,NOW(),NULL,NULL,NULL,NULL,1);

Lancement d'application

Si vous avez déjà démarré docker. Exécutez ./gradlew composeDown une fois pour supprimer tous les conteneurs, etc.

$ ./gradlew composeDown


> Task :composeDown
Stopping todoDb ... 
Stopping todoDb ... done
Removing todoDb ... 
Removing todoDb ... done
Removing network eb415214cdb915cc9f956bc6e963ac23_spring-boot-todo-sample__default

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.4.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 4s
1 actionable task: 1 executed

Redémarrez le docker avec ./gradlew composeUp et créez une base de données.

Puis démarrez l'application avec ./graldew bootRun. [Article précédent ** application.yml **](https://qiita.com/megumi_622/items/c38100ca5b266e301643#applicationyml%E3%82%92%E4%BD%9C%E6%88%90%E3%81 Vous pouvez vérifier l'écran de connexion avec le numéro de port spécifié dans server.port de% 99% E3% 82% 8B).

Si vous accédez à l'URL suivante, vous serez redirigé vers ** / login **. http://localhost:18082 スクリーンショット 2020-06-15 23.42.58.png

Étant donné que la page après la connexion n'est pas spécifiée, une page vierge s'affiche après la connexion. Nom d'utilisateur: [email protected] ou [email protected] Mot de passe: passw0rd

La prochaine fois, j'écrirai l'enregistrement des utilisateurs et le processus d'édition.

Recommended Posts

Essayez d'implémenter la fonction de connexion avec Spring Boot
Essayez d'implémenter une fonction de connexion avec Spring-Boot
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
Essayez d'automatiser la migration avec Spring Boot Flyway
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Essayez Spring Boot de 0 à 100.
Implémenter GraphQL avec Spring Boot
Connexion SNS avec Spring Boot
Fonction de connexion avec Spring Security
Avec Spring Boot, hachez le mot de passe et utilisez l'enregistrement des membres et la sécurité Spring pour implémenter la fonction de connexion.
Essayez d'implémenter la fonction Widget iOS14
Essayez d'utiliser Spring Boot avec VS Code
Comment implémenter TextInputLayout avec la fonction de validation
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Partie 1: Essayez d'utiliser la connexion OAuth 2.0 prise en charge par Spring Security 5 avec Spring Boot
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Essayez l'authentification LDAP avec Spring Security (Spring Boot) + OpenLDAP
Essayez d'implémenter TCP / IP + NIO avec JAVA
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Je voulais classer la botte à ressort dans un multi-projet
Essayez d'afficher Hello World avec Spring + Gradle
"Professeur, je souhaite implémenter une fonction de connexion au printemps" ① Hello World
Télécharger avec Spring Boot
Créez une fonction de connexion / déconnexion avec Spring Security selon le guide officiel de Spring [pour les débutants]
Paramètres de connexion à MySQL avec Spring Boot + Spring JDBC
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
Mappez automatiquement DTO aux entités avec l'API Spring Boot
Essayez d'utiliser OpenID Connect avec Keycloak (application Spring Boot)
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
Essayez la loi de l'inversion des dépendances avec plusieurs projets Spring Boot
Comment démarrer par environnement avec Spring Boot de Maven
Tentative de SSR Vue.js avec Spring Boot et GraalJS
Essayez de travailler avec Keycloak en utilisant Spring Security SAML (Spring 5)
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Java pour jouer avec Function
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Introduction à Spring Boot ① ~ DI ~
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Introduction à Spring Boot ② ~ AOP ~
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Introduction à Spring Boot, partie 1
Essayez d'utiliser Spring Boot Security
Essayez Spring Boot sur Mac
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Sortez le journal d'accès Tomcat intégré à la sortie standard avec Spring Boot
À propos de la fonction de Spring Boot en raison de différentes versions