[JAVA] Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren

Fahren Sie mit dem vorherigen Artikel fort [Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren] und implementieren Sie die Anmeldeverarbeitung.

build.gradle Fügen Sie ** Spring-Boot-Starter-Sicherheit ** hinzu.

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'
}

// ...Abkürzung

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" //hinzufügen
    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' //hinzufügen
}

Erstellen Sie SecurityConfig.java

Erstellen Sie in derselben Hierarchie wie ** Anwendung **.

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;

//Sicherheitseinstellungsklasse
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    //Passwort-Encoder
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
     }

    @Autowired
    private DataSource dataSource;

    //SQL-Anweisung, um den Benutzer zu erhalten
    private static final String USER_SQL = "SELECT"
        + " email,"
        + " password,"
        + " true"
        + " FROM"
        + " users"
        + " WHERE"
        + " email = ?";

    //SQL-Anweisung zum Abrufen von Berechtigungen
    private static final String ROLE_SQL = "SELECT"
        + " email,"
        + " role"
        + " FROM"
        + " users"
        + " WHERE"
        + " email = ?";

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

        //Wenden Sie keine Sicherheit für den Zugriff auf statische Ressourcen an
        web.ignoring().antMatchers("/resources/**");
    }
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        //Einstellungen für Seiten, für die keine Anmeldung erforderlich ist
        http.authorizeRequests()
            .antMatchers("/resources/**");
            //Der Zugriff auf andere Seiten wird verweigert
            .anyRequest().authenticated();
        
        //Einstellungen für das Anmeldeformular
        http.formLogin()
            //Benutzerparametername
            .usernameParameter("email")
            //Name des Passwortparameters
            .passwordParameter("password");

        //Deaktivieren Sie CSRF-Maßnahmen
        http.csrf().disable();
    }

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

        //Rufen Sie während des Anmeldevorgangs Benutzerinformationen aus der Datenbank ab
        auth.jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery(USER_SQL)
            .authoritiesByUsernameQuery(ROLE_SQL)
            .passwordEncoder(passwordEncoder());
    }
}

Ändern Sie R__1_insert_datas.sql

Ändern Sie das Passwort in eine codierte Zeichenfolge. Die ursprüngliche Zeichenfolge ist ** 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);

Anwendungsstart

Wenn Sie Docker bereits gestartet haben. Führen Sie ./gradlew composeDown einmal aus, um alle Container usw. zu löschen.

$ ./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

Starten Sie Docker erneut mit ./gradlew composeUp und erstellen Sie eine Datenbank.

Starten Sie dann die Anwendung mit ./graldew bootRun. [Vorheriger Artikel ** application.yml **](https://qiita.com/megumi_622/items/c38100ca5b266e301643#applicationyml%E3%82%92%E4%BD%9C%E6%88%90%E3%81 Sie können den Anmeldebildschirm mit der in server.port angegebenen Portnummer (99% E3% 82% 8B) überprüfen.

Wenn Sie auf die folgende URL zugreifen, werden Sie zu ** / login ** weitergeleitet. http://localhost:18082 スクリーンショット 2020-06-15 23.42.58.png

Da die Seite nach der Anmeldung nicht angegeben ist, wird nach der Anmeldung eine leere Seite angezeigt. Benutzername: [email protected] oder [email protected] Passwort: passw0rd

Nächstes Mal werde ich den Benutzerregistrierungs- und Bearbeitungsprozess schreiben.

Recommended Posts

Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Versuchen Sie, eine Anmeldefunktion mit Spring-Boot zu implementieren
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Versuchen Sie Spring Boot von 0 bis 100.
Implementieren Sie GraphQL mit Spring Boot
SNS-Login mit Spring Boot
Anmeldefunktion mit Spring Security
Hash beim Spring-Boot das Passwort und verwenden Sie die Mitgliederregistrierung und die Spring-Sicherheit, um die Anmeldefunktion zu implementieren.
Versuchen Sie, die iOS14-Widget-Funktion zu implementieren
Versuchen Sie es mit Spring Boot mit VS-Code
So implementieren Sie TextInputLayout mit Validierungsfunktion
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Teil 1: Versuchen Sie, die von Spring Security 5 unterstützte OAuth 2.0-Anmeldung mit Spring Boot zu verwenden
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
Versuchen Sie, TCP / IP + NIO mit JAVA zu implementieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Ich wollte Spring Boot in einem Multiprojekt gradle
Versuchen Sie, Hallo Welt mit Frühling + Gradle anzuzeigen
"Lehrer, ich möchte im Frühjahr eine Anmeldefunktion implementieren" ① Hallo Welt
Mit Spring Boot herunterladen
Erstellen Sie mit Spring Security eine Anmelde- / Abmeldefunktion gemäß dem offiziellen Spring-Leitfaden [für Anfänger].
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Probieren Sie das Gesetz der Abhängigkeitsumkehr mit mehreren Spring Boot-Projekten aus
Booten nach Umgebung mit Spring Boot of Maven
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Versuchen Sie, mit Keycloak mit Spring Security SAML (Spring 5) zu arbeiten.
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Java zum Spielen mit Function
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
Einführung in Spring Boot ~ ~ DI ~
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Einführung in Spring Boot ② ~ AOP ~
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Einführung in Spring Boot Teil 1
Versuchen Sie es mit Spring Boot Security
Versuchen Sie Spring Boot auf dem Mac
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Geben Sie das integrierte Tomcat-Zugriffsprotokoll mit Spring Boot an die Standardausgabe aus
Über die Funktion von Spring Boot aufgrund unterschiedlicher Versionen