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 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 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);
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
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