Integração do AuthenticationManager com provedores
Conecte seu filtro JWT ao `AuthenticationManager` do Spring Security e a provedores de autenticação personalizados.
Integração do AuthenticationManager com provedores é uma aula grátis de Spring Security 6 & JWT Authentication no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Spring Security 6 & JWT Authentication, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Spring Security 6 & JWT Authentication inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Orchestrating Authentication
Welcome to the core of Spring Security's authentication process! Today, we'll connect our JWT filter with two vital components: the AuthenticationManager and AuthenticationProvider.
These components work together to verify a user's identity and establish their security context.
The Manager's Core Responsibility
The AuthenticationManager is the central interface in Spring Security for handling authentication requests. Think of it as the conductor of an orchestra.
- It receives an
Authenticationobject (representing a user's credentials). - It delegates the actual authentication task to one or more
AuthenticationProviders. - If successful, it returns a fully authenticated
Authenticationobject.
The Role of AuthenticationProvider
While the AuthenticationManager orchestrates, AuthenticationProviders are the specialized workers.
Each provider knows how to authenticate a specific type of user or credential (e.g., username/password, LDAP, or in our case, a JWT). It contains the logic to validate the credentials.
Crafting a JWT Token Object
For our JWT flow, we need a way to represent an unauthenticated JWT within Spring Security. We'll create a custom Authentication implementation, often called JwtAuthenticationToken.
- It will hold the raw JWT string when unauthenticated.
- After authentication, it will hold the authenticated user's details (
UserDetails) and authorities.
Building Our JWT Provider
Now, let's create our own JwtAuthenticationProvider. This class will implement the AuthenticationProvider interface.
Its main job is to take our JwtAuthenticationToken, validate the JWT, extract user details, and return a fully authenticated token.
JwtAuthenticationProvider Logic
Here's a simplified look at what our JwtAuthenticationProvider's authenticate method might do. It checks if the token is valid and then builds an authenticated object.
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.
}
}Wiring Up the Provider
For our JwtAuthenticationProvider to be used, we must register it with Spring Security's configuration. This is typically done in your security configuration class.
Spring Boot often auto-configures the AuthenticationManager, but we can add custom providers to it.
Filter-Manager Interaction
Remember our custom JwtAuthenticationFilter from the previous lesson? Now we connect it to the AuthenticationManager.
- The filter will extract the JWT from the request.
- It will create an unauthenticated
JwtAuthenticationToken. - It will then pass this token to the
AuthenticationManagerfor processing.
The manager, in turn, will find and use our JwtAuthenticationProvider.
JWT Authentication Journey
Let's trace the full authentication flow with our new components:
- Client sends request with JWT in the
Authorizationheader. - Our
JwtAuthenticationFilterintercepts the request, extracts the JWT. - Filter creates an unauthenticated
JwtAuthenticationToken. - Filter calls
AuthenticationManager.authenticate()with this token. AuthenticationManagerfinds ourJwtAuthenticationProvider(becausesupports()returns true).JwtAuthenticationProvidervalidates the JWT and builds a fully authenticatedJwtAuthenticationToken(containingUserDetailsand authorities).- The filter receives the authenticated token and sets it in the
SecurityContextHolder. - The request proceeds, now knowing who the user is and what they can do!
Understanding the Flow
Which statements accurately describe the roles of AuthenticationManager and AuthenticationProvider in a Spring Security JWT setup?
Bringing It All Together
In this lesson, we've explored how AuthenticationManager acts as the central orchestrator and how a custom AuthenticationProvider handles the specific logic for validating JWTs.
By integrating these components with our JwtAuthenticationFilter, we've established a robust and modular JWT authentication flow within Spring Security. This separation of concerns makes your security configuration flexible and maintainable!
Perguntas Frequentes
A aula “Integração do AuthenticationManager com provedores” é grátis?
Sim — o texto completo de “Integração do AuthenticationManager com provedores” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Spring Security 6 & JWT Authentication, atualize para CoddyKit PRO. O curso de Spring Security 6 & JWT Authentication inclui 4 aulas no total.
O que vou aprender em “Integração do AuthenticationManager com provedores”?
Conecte seu filtro JWT ao `AuthenticationManager` do Spring Security e a provedores de autenticação personalizados. Você pratica Spring Security 6 & JWT Authentication com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Spring Security 6 & JWT Authentication?
Nenhuma experiência prévia é necessária. Spring Security 6 & JWT Authentication no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Integração do AuthenticationManager com provedores”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Spring Security 6 & JWT Authentication?
Sim. Cada aula de Spring Security 6 & JWT Authentication inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Projetando o fluxo de autenticação com JWT
- Implementando um filtro JWT personalizado
- Integração do AuthenticationManager com provedores
- Tratando erros de autenticação e pontos de entrada