Integrasjon av AuthenticationManager og Provider
Koble JWT-filteret til Spring Securitys `AuthenticationManager` og egendefinerte autentiseringsleverandører.
Integrasjon av AuthenticationManager og Provider er en gratis leksjon i Spring Security 6 og JWT-autentisering på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Spring Security 6 og JWT-autentisering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Spring Security 6 og JWT-autentisering inneholder totalt 4 leksjoner.
Orkestrere autentisering
Velkommen til kjernen i Spring Securitys autentiseringsprosess! I dag skal vi koble JWT-filteret vårt sammen med to viktige komponenter: AuthenticationManager og AuthenticationProvider.
Disse komponentene samarbeider om å bekrefte brukerens identitet og opprette brukerens sikkerhetskontekst.
Managerens hovedansvar
AuthenticationManager er det sentrale grensesnittet i Spring Security for håndtering av autentiseringsforespørsler. Tenk på det som dirigenten i et orkester.
- Det mottar et
Authentication-objekt (som representerer brukerens påloggingsinformasjon). - Det delegerer selve autentiseringsoppgaven til én eller flere
AuthenticationProvider-instanser. - Hvis autentiseringen lykkes, returnerer det et fullstendig autentisert
Authentication-objekt.
AuthenticationProviders rolle
Mens AuthenticationManager orkestrerer, er AuthenticationProvider-instanser de spesialiserte arbeiderne.
Hver provider vet hvordan en bestemt type bruker eller påloggingsinformasjon skal autentiseres (f.eks. brukernavn/passord, LDAP eller, i vårt tilfelle, en JWT). Den inneholder logikken som validerer påloggingsinformasjonen.
Opprette et JWT-tokenobjekt
I JWT-flyten vår trenger vi en måte å representere en uautentisert JWT på i Spring Security. Vi oppretter derfor en egendefinert implementasjon av Authentication, som ofte kalles JwtAuthenticationToken.
- Før autentisering inneholder den den rå JWT-strengen.
- Etter autentisering inneholder den den autentiserte brukerens detaljer (
UserDetails) og autoriteter.
Bygge JWT-provideren vår
La oss nå opprette vår egen JwtAuthenticationProvider. Denne klassen skal implementere grensesnittet AuthenticationProvider.
Hovedoppgaven er å ta imot vår JwtAuthenticationToken, validere JWT-en, hente ut brukerdetaljer og returnere et fullt autentisert token.
Logikken i JwtAuthenticationProvider
Her er en forenklet oversikt over hva authenticate-metoden i JwtAuthenticationProvider kan gjøre. Den kontrollerer om tokenet er gyldig, og oppretter deretter et autentisert objekt.
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.GrantedAuthority;
import java.util.Collections;
public class CustomJwtAuthProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
// In a real app, you'd validate the JWT here.
// For this example, we'll assume it's valid if it's our custom type.
if (authentication instanceof JwtAuthenticationToken) {
// Simulate successful JWT validation
// Extract username and roles from the JWT payload
String username = "coddykitUser"; // From JWT subject
// Roles would also come from JWT claims
// For simplicity, we grant a basic role
GrantedAuthority role = () -> "ROLE_USER";
User userDetails = new User(username, "", Collections.singletonList(role));
// Return a fully authenticated token
// The credentials (JWT string) are usually cleared
return new JwtAuthenticationToken(userDetails, Collections.singletonList(role));
}
return null; // Not our type of authentication
}
@Override
public boolean supports(Class<?> authentication) {
// This provider supports our custom JwtAuthenticationToken
return JwtAuthenticationToken.class.isAssignableFrom(authentication);
}
// Simple placeholder for our custom token
static class JwtAuthenticationToken implements Authentication {
private final User userDetails;
private final String jwtToken;
private boolean authenticated;
private java.util.Collection<? extends GrantedAuthority> authorities;
public JwtAuthenticationToken(String jwtToken) {
this.jwtToken = jwtToken;
this.userDetails = null;
this.authenticated = false;
this.authorities = Collections.emptyList();
}
public JwtAuthenticationToken(User userDetails,
java.util.Collection<? extends GrantedAuthority> authorities) {
this.userDetails = userDetails;
this.jwtToken = null; // Token already validated
this.authenticated = true;
this.authorities = authorities;
}
@Override
public java.util.Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
@Override
public Object getCredentials() {
return jwtToken; // The raw JWT string (if unauthenticated)
}
@Override
public Object getDetails() {
return userDetails;
}
@Override
public Object getPrincipal() {
return userDetails; // The authenticated user object
}
@Override
public boolean isAuthenticated() {
return authenticated;
}
@Override
public void setAuthenticated(boolean isAuthenticated)
throws IllegalArgumentException {
this.authenticated = isAuthenticated;
}
@Override
public String getName() {
return userDetails != null ? userDetails.getUsername() : "N/A";
}
}
public static void main(String[] args) {
System.out.println("CustomJwtAuthProvider initialized.");
// In a real app, Spring Security would call authenticate()
// We're just demonstrating the class structure here.
}
}Koble inn provideren
For at JwtAuthenticationProvider skal kunne brukes, må vi registrere den i konfigurasjonen av Spring Security. Dette gjøres vanligvis i sikkerhetskonfigurasjonsklassen.
Spring Boot konfigurerer ofte AuthenticationManager automatisk, men vi kan legge til egendefinerte providere.
Samspillet mellom filter og manager
Husk vårt egendefinerte JwtAuthenticationFilter fra forrige leksjon? Nå kobler vi det til AuthenticationManager.
- Filteret henter ut JWT-en fra forespørselen.
- Det oppretter en uautentisert
JwtAuthenticationToken. - Deretter sender det dette tokenet til
AuthenticationManagerfor behandling.
Manager-komponenten finner og bruker deretter vår JwtAuthenticationProvider.
JWT-autentiseringsflyten
La oss følge hele autentiseringsflyten med de nye komponentene våre:
- Klienten sender en forespørsel med JWT i
Authorization-headeren. - Vårt
JwtAuthenticationFilterfanger opp forespørselen og henter ut JWT-en. - Filteret oppretter en uautentisert
JwtAuthenticationToken. - Filteret kaller
AuthenticationManager.authenticate()med dette tokenet. AuthenticationManagerfinner vårJwtAuthenticationProvider(fordisupports()returnerer true).JwtAuthenticationProvidervaliderer JWT-en og oppretter en fullt autentisertJwtAuthenticationToken(som inneholderUserDetailsog autoriteter).- Filteret mottar det autentiserte tokenet og legger det i
SecurityContextHolder. - Forespørselen fortsetter, og systemet vet nå hvem brukeren er og hva vedkommende kan gjøre!
Forstå flyten
Hvilke påstander beskriver rollene til AuthenticationManager og AuthenticationProvider korrekt i et Spring Security-oppsett med JWT?
Sett alt sammen
I denne leksjonen har vi sett på hvordan AuthenticationManager fungerer som den sentrale koordinatoren, og hvordan en egendefinert AuthenticationProvider håndterer den spesifikke logikken for validering av JWT-er.
Ved å integrere disse komponentene med JwtAuthenticationFilter har vi etablert en robust og modulær JWT-autentiseringsflyt i Spring Security. Denne separasjonen av ansvarsområder gjør sikkerhetskonfigurasjonen fleksibel og enklere å vedlikeholde!
Lær deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Integrasjon av AuthenticationManager og Provider» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Spring Security 6 og JWT-autentisering, inkludert «Integrasjon av AuthenticationManager og Provider», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Spring Security 6 og JWT-autentisering inneholder totalt 4 leksjoner.
Hva lærer jeg i «Integrasjon av AuthenticationManager og Provider»?
Koble JWT-filteret til Spring Securitys `AuthenticationManager` og egendefinerte autentiseringsleverandører. Du øver på Spring Security 6 og JWT-autentisering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Spring Security 6 og JWT-autentisering?
Ingen tidligere erfaring er nødvendig. Spring Security 6 og JWT-autentisering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Integrasjon av AuthenticationManager og Provider»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Spring Security 6 og JWT-autentisering-leksjonen?
Ja. Alle Spring Security 6 og JWT-autentisering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Utforme autentiseringsflyten for JWT
- Implementere et egendefinert JWT-filter
- Integrasjon av AuthenticationManager og Provider
- Håndtering av autentiseringsfeil og entry points