Note: While WebSecurityConfigurerAdapter
was previously used extensively, it’s now deprecated. We’ll focus on the modern, component-based approach.
Core Components
- HttpSecurity: Defines HTTP security, including request matching, authentication, authorization, and exception handling.
- SecurityFilterChain: Represents the security filter chain.
- AuthenticationManagerBuilder: Configures authentication managers.
- UserDetailsService: Provides user details.
- PasswordEncoder: Encodes passwords.
### Basic Configuration Example
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.formLogin();
return http.build();
}
// ... other beans
}
Breaking Down the Configuration
- @Configuration: Marks the class as a configuration class.
- SecurityFilterChain bean: Defines the security filter chain.
- HttpSecurity: Configures HTTP security.
- authorizeHttpRequests: Configures request matching and access control.
- anyRequest().authenticated(): Requires authentication for all requests.
- formLogin(): Enables form-based login.
Customizing the Configuration
You can customize the configuration extensively using various methods provided by HttpSecurity
.
Example:
http
.authorizeHttpRequests((authz) -> authz
.antMatchers("/public/**").permitAll() // Allow access to public resources
.antMatchers("/admin/**").hasRole("ADMIN") // Require ADMIN role for admin resources
.anyRequest().authenticated()
)
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/")
.failureUrl("/login?error")
.and()
.logout()
.logoutSuccessUrl("/");
Key Methods in HttpSecurity
- authorizeHttpRequests: Configures request matching and access control.
- formLogin: Configures form-based login.
- httpBasic: Configures HTTP Basic authentication.
- csrf(): Configures CSRF protection.
- sessionManagement(): Configures session management.
- exceptionHandling(): Configures exception handling.
Additional Considerations
- SecurityFilterChain: This bean is essential for defining the security filter chain.
- AuthenticationManagerBuilder: Use this to configure authentication managers.
- UserDetailsService: Provide a
UserDetailsService
implementation to fetch user details. - PasswordEncoder: Use a strong password encoder like
BCryptPasswordEncoder
.
By understanding these components and methods, you can create tailored security configurations for your applications.