Spring Security Architecture (original) (raw)

Last Updated : 8 May, 2026

Spring Security is a framework used to secure Java applications by handling authentication, authorization, and protection against common security threats. It is widely used in Spring-based applications to implement flexible security mechanisms.

Spring Security Architecture

This diagram shows how an HTTP request is processed through the Spring Security filter chain to handle authentication and authorization before returning the response.

architecture

Spring-Security

Core Components of Spring Security Architecture

1. Security Filter Chain

**Example:

Java `

@Configuration public class SecurityConfig {

@Bean
public SecurityFilterChain
securityFilterChain(HttpSecurity http) throws Exception
{

    http.csrf(
            csrf
            -> csrf.disable()) // Disable CSRF for APIs
        .authorizeHttpRequests(
            auth
            -> auth.requestMatchers("/public/**")
                   .permitAll()
                   .anyRequest()
                   .authenticated())
        .httpBasic(); // Enable Basic Authentication

    return http.build();
}

}

`

2. Authentication Manager

**Example:

Java `

@Configuration public class AuthManagerConfig {

@Bean
public AuthenticationManager authenticationManager(
    AuthenticationConfiguration configuration)
    throws Exception
{

    return configuration.getAuthenticationManager();
}

}

`

3. Authentication Providers

**Examples:

@Configuration public class ProviderConfig {

@Bean
public DaoAuthenticationProvider authenticationProvider(
    UserDetailsService userDetailsService,
    PasswordEncoder passwordEncoder)
{

    DaoAuthenticationProvider provider
        = new DaoAuthenticationProvider();
    provider.setUserDetailsService(userDetailsService);
    provider.setPasswordEncoder(passwordEncoder);

    return provider;
}

}

`

**Note: DaoAuthenticationProvider is most commonly used for database-based authentication It ensures passwords are validated securely using a PasswordEncoder

4. UserDetailsService

**Example:

Java `

@Configuration public class UserConfig {

@Bean
public UserDetailsService userDetailsService(PasswordEncoder encoder) {
    return new InMemoryUserDetailsManager(
        User.withUsername("john")
            .password(encoder.encode("password"))
            .roles("USER")
            .build(),
        User.withUsername("admin")
            .password(encoder.encode("admin123"))
            .roles("ADMIN")
            .build()
    );
}

}

`

5. Password Encoder

**Example:

Java `

@Configuration public class PasswordConfig {

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(); // Strong hashing
}

}

`

6. SecurityContextHolder

Stores the SecurityContext for the current request/thread. And holds the Authentication object, which contains:

**Example:

Java `

@RestController public class UserController {

@GetMapping("/me")
public String getCurrentUser() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    return "Logged in as: " + authentication.getName() +
           " | Roles: " + authentication.getAuthorities();
}

}

`

How It Works Internally