[JAVA] Führen Sie nach der Standardauthentifizierung mit Spring Boot eine beliebige Verarbeitung aus.

Das Implementieren einer Authentifizierungsfunktion mit Spring Boot ist eine tägliche Routine. Trotz der Standardauthentifizierung kann jedoch eine Verarbeitung nach erfolgreicher Authentifizierung, eine Sperrverarbeitung nach einem Authentifizierungsfehler, ein Zurücksetzen der Anzahl von Fehlern oder eine Protokollausgabe durchgeführt werden.

Wenn es sich um ein allgemeines formLogin oder oauth2Login handelt, Die Lösung besteht darin, es in successHandler oder failHandler zu implementieren. .. ..

Ich werde es posten, weil es nicht viele Informationen auf Japanisch gab.

dependency spring boot 2.0.4.RELEASE lombok mit.

Implementierung

Implementieren Sie die Standardauthentifizierung in den Sicherheitseinstellungen. Registrieren Sie außerdem eine Klasse, die die RememberMeServices-Schnittstelle in SharedObject implementiert.

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    MyRememberMeServices myRememberMeServices;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //Durch Ersetzen von RemembeMeServise kann die Verarbeitung vor und nach der Standardauthentifizierung ausgeführt werden.
        http.setSharedObject(RememberMeServices.class,myRememberMeServices);
        http.httpBasic()
                .and()
                    .authorizeRequests()
                    .anyRequest()
                    .authenticated()
                .and()
                    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); //Sitzungen mit Cookies müssen nicht verwaltet werden;
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .passwordEncoder(NoOpPasswordEncoder.getInstance()) //Erforderlich ab spring5?
                .withUser("LLENN")
                .password("p-chan")
                .roles("GGO_USER");
    }

}

Sie können die Erfolgs- oder Fehlerverarbeitung in der RememberMeServices-Oberfläche implementieren.

@Slf4j
@Service
public class MyRememberMeServices implements RememberMeServices {

	@Override
	public Authentication autoLogin(HttpServletRequest request, HttpServletResponse response) {
		return null;
	}
	@Override
	public void loginSuccess(HttpServletRequest request, HttpServletResponse response, Authentication successfulAuthentication) {
		log.info("login:{}",successfulAuthentication.getName());
	}

	@Override
	public void loginFail(HttpServletRequest request, HttpServletResponse response) {
		//Lassen Sie den Benutzer für die Authentifizierung verwenden.
		String base64Credentials = request.getHeader("authorization").substring("Basic".length()).trim();
		String credentialSting = new String(Base64.getDecoder().decode(base64Credentials), Charset.forName("UTF-8"));
		String username = credentialSting.split(":")[0];

		log.error("login fail:{}",username);
	}
}

Die obige Implementierung gibt nur ein Protokoll aus. Da die Klasse jedoch "@ Service" ist, können Sie Ihre Lieblingskomponente DI.

Beachten Sie jedoch, dass ** loginSuccess und loginFail nach dem Standardauthentifizierungsprozess ** aufgerufen werden.

Wenn Sie sich nicht anmelden, verfügen Sie nicht über Ihre Anmeldeinformationen. Zum Zeitpunkt von loginFial kann der für die Authentifizierung verwendete Benutzername daher nicht aus "Authentication :: getName" abgerufen werden, sondern muss aus den Header-Informationen von HttpServletRequest abgerufen werden.

das ist alles.

Die Quelle wurde auf github hochgeladen. Ich würde es begrüßen, wenn Sie sich darauf beziehen könnten. https://github.com/amanoese/spring-basic-auth-example

Beiseite

Es ist gut, den Prozess der RememberMe Services for Basic-Authentifizierung zu ersetzen, aber was ist, wenn die ursprüngliche Implementierung hervorragende Arbeit leistet? .. Als ich mir die Quelle ansah, fand ich den folgenden Code.

NullRememberMeServices


package org.springframework.security.web.authentication;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;

public class NullRememberMeServices implements RememberMeServices {
    public NullRememberMeServices() {
    }

    public Authentication autoLogin(HttpServletRequest request, HttpServletResponse response) {
        return null;
    }

    public void loginFail(HttpServletRequest request, HttpServletResponse response) {
    }

    public void loginSuccess(HttpServletRequest request, HttpServletResponse response, Authentication successfulAuthentication) {
    }
}

Es sieht aus wie eine Klasse, die zum Umschreiben vorbereitet ist. Was die Implementierung angeht, war ich verwirrt, weil ich den Ort, an dem autoLogin aufgerufen wurde, nicht finden konnte. .. ..

Frühling ist schwierig.

Recommended Posts

Führen Sie nach der Standardauthentifizierung mit Spring Boot eine beliebige Verarbeitung aus.
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Mit Spring Boot herunterladen
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Grundlegende Authentifizierung mit Java 11 HttpClient
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Feder mit Kotorin --6 Asynchrone Verarbeitung
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
[Java] Thymeleaf Basic (Spring Boot)
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
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
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Implementierte Authentifizierungsfunktion mit Spring Security ②
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Implementierte Authentifizierungsfunktion mit Spring Security ③
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Implementierte Authentifizierungsfunktion mit Spring Security ①
Erhalten Sie Validierungsergebnisse mit Spring Boot
Erfahren Sie mehr über die Architektur der Spring Security-Authentifizierungsverarbeitung
Oauth2-Authentifizierung mit Spring Cloud Gateway
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Die Nachrichtenkooperation begann mit Spring Boot
Einführung der Basisauthentifizierung in Heroku [Spring Framework]
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
DB-Authentifizierung mit Spring Security und Hashing mit BCrypt
HTTPS mit Spring Boot und Let's Encrypt
Versuchen Sie es mit Spring Boot mit VS-Code