[JAVA] DB-Authentifizierung mit Spring Security und Hashing mit BCrypt

Überblick

Entwicklungsumgebung

Einführung in Spring Security

Wählen Sie die folgenden 4 in der Abhängigkeit aus


Beschreiben der DB-Verbindungsinformationen in der Eigenschaftendatei

application.properties


spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/[Name der Datenbank]
spring.datasource.username=[DB-Benutzername]
spring.datasource.password=[Passwort]
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

Erstellen Sie eine Tabelle mit Benutzerinformationen

create table USER_TABLE (
    USER_ID VARCHAR2(30 char)
  , FAMILY_NAME VARCHAR2(10 char) not null
  , FIRST_NAME VARCHAR2(10 char) not null
  , PASSWORD VARCHAR2(255) not null
  , constraint USER_TABLE_PKC primary key (USER_ID)
) ;

Datenregistrierung

Das Passwort unten ist ein Hash von "pass". Ich habe auf [diesen Artikel] verwiesen (https://qiita.com/NagaokaKenichi/items/2742749a93df15b55d24).

INSERT INTO
    USER_TABLE
VALUES(
    '0001'
   ,'Prüfung'
   ,'Taro'
   ,'$2a$10$w0C4tFU.SLFATC1Y6Y4uy.vMYsLXhlfvgnFP4dLbRjEa6/Ag1csKS'
   );

Entitätsklasse erstellen

UserTable.java


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "USER_TABLE")
public class UserTable {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "USER_ID")
	private String userId;

	@Column(name = "FAMILY_NAME")
	private String familyName;

	@Column(name = "FIRST_NAME")
	private String firstName;

	@Column(name = "PASSWORD")
	private String password;

// Getter,Setter weggelassen


Erstellen Sie ein Repository

UserTableRepository.java


import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.azkz.entity.UserTable;

@Repository
public interface UserTableRepository extends JpaRepository<UserTable, String> {

	public UserTable findByUserId(String userId);

}

Erstellen Sie SecurityConfig

DemoSecurityConfig.java


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class DemoSecurityConfig extends WebSecurityConfigurerAdapter {

	//Eine Methode zum Einschränken der zugänglichen URL und zum Angeben des Übergangsziels bei erfolgreicher Anmeldung
	@Override
	protected void configure(HttpSecurity httpSecurity) throws Exception {
		httpSecurity.authorizeRequests()
				.mvcMatchers("/").permitAll() // 「/Kann von jedem abgerufen werden
				.anyRequest().authenticated() //Andernfalls müssen Sie sich anmelden
				.and()
				.formLogin()
				.defaultSuccessUrl("/success"); //Wenn die Anmeldung erfolgreich ist, "/Stellen Sie eine Get-Anfrage zum "Erfolg"
	}

	//Eine Methode zum Hashing des eingegebenen Kennworts mithilfe der BCrypt-Methode
	@Bean
	protected PasswordEncoder passwordEncoder() {
		return new BCryptPasswordEncoder();
	}
}

Erstellen Sie UserDetailsService

DemoUserDetailsService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

import com.azkz.entity.UserTable;
import com.azkz.repository.UserTableRepository;

@Service
public class DemoUserDetailsService implements UserDetailsService {

	@Autowired
	UserTableRepository userTableRepository;

	@Override
	public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException {

		//Abrufen von Daten aus der Datenbank basierend auf der eingegebenen Benutzer-ID
		UserTable userTable = userTableRepository.findByUserId(userId);

		//Geben Sie Werte (Benutzer-ID, Kennwort) und instanziierte DemoUserDetails-Klasse ein
		//Die Anmeldeprüfung erfolgt durch Vergleichen in Spring Security.
		return new DemoUserDetails(userTable);

	}

}

Benutzerdetails erstellen

DemoUserDetails.java


import java.util.Collections;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.User;

import com.azkz.entity.UserTable;

public class DemoUserDetails extends User {

	@Autowired
	UserTable userTable;

	public DemoUserDetails(UserTable userTable) {
		// 「Collections.emptySet()Ist ursprünglich eine Sammlung von Autoritätsnamen. Diesmal ist es leer.
		super(userTable.getUserId(), userTable.getPassword(),Collections.emptySet());
		this.userTable = userTable;
	}

	//Holen Sie sich Ihre eigenen Elemente aus Sitzungsinformationen

	public String getFirstName() {
		return this.userTable.getFirstName();
	}

	public String getFamilyName() {
		return this.userTable.getFamilyName();
	}

}

Controller erstellen

DemoController.java


import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.azkz.security.DemoUserDetails;

@RestController
public class DemoController {

	@GetMapping("/success")
	public DemoUserDetails loginSuccess() {
		//Erhalten Sie angemeldete Benutzerinformationen
		DemoUserDetails demoUserDetails =
				(DemoUserDetails) SecurityContextHolder
									.getContext().getAuthentication().getPrincipal();

		return demoUserDetails;
	}
}

Bildschirmprüfung

Gehen Sie zu http: // localhost: 8080 / login

2020-03-15-19-24-53.png


erfolgreicher Login

2020-03-15-19-26-25.png


Anmeldungsfehler

2020-03-15-19-28-26.png


Am Ende

Recommended Posts

DB-Authentifizierung mit Spring Security und Hashing mit BCrypt
Implementierte Authentifizierungsfunktion mit Spring Security ②
Implementierte Authentifizierungsfunktion mit Spring Security ①
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
Fügen Sie mit Spring Security Ihre eigenen Authentifizierungselemente hinzu
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Anmeldefunktion mit Spring Security
Spring Security-Nutzungsnotiz Authentifizierung / Autorisierung
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Erfahren Sie mehr über die Architektur der Spring Security-Authentifizierungsverarbeitung
Oauth2-Authentifizierung mit Spring Cloud Gateway
Beim Testen der Formularauthentifizierung mit Spring Security tritt ein 404-Fehler auf
Verwenden Sie Spring Security JSP-Tags mit FreeMarker
Wie Spring Security mit Hello World funktioniert
Hash-Passwörter mit Spring Boot + Spring Security (mit Salt, mit Stretching)
Aktualisieren Sie die Datenbank regelmäßig mit Spring Batch und My Batis
Erstellen Sie mit Spring Boot 2.0 einen Spring Cloud Config Server mit Sicherheit
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Behandeln Sie das gehashte Passwort mit BCryptPasswordEncoder von Spring Security in Perl
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Versuchen Sie, mit Keycloak mit Spring Security SAML (Spring 5) zu arbeiten.
Rufen Sie Ihre eigene Methode mit PreAuthorize in Spring Security auf
Erstellen Sie eine API-Schlüsselauthentifizierung für die Web-API in Spring Security
Neuer Mitarbeiter hat versucht, mit Spring Security eine Authentifizierungs- / Autorisierungsfunktion von Grund auf neu zu erstellen
Spring Security erhöht 403 verboten
Selbstgemachte Validierung mit Spring
Frühling mit Kotorin ―― 1. SPRING INITIALIZR
Mit Spring Boot herunterladen
Spring Boot-Anwendung, die DB-Verbindungseinstellungen mit Parametern angibt
Implementieren Sie eine einfache Rest-API mit Spring Security & JWT mit Spring Boot 2.0
Melden Sie sich mit HttpServletRequest # in Spring Security in der Servlet 3.x-Umgebung an