You can control user session behavior like max sessions per user and session invalidation.
SecurityConfig.java
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) // Create session only if required
.maximumSessions(1) // Allow only one active session per user
.expiredUrl("/session-expired") // Redirect if session expires
);
return http.build();
}
CSRF Protection (csrf().disable() vs. csrfTokenRepository())
CSRF (Cross-Site Request Forgery) protection is enabled by default in Spring Security.
Disable CSRF (Only for APIs)
Disabling CSRF is recommended only for REST APIs (stateless applications).
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable()); // Disables CSRF (Not recommended for web apps)
return http.build();
}
Enable CSRF with Token Repository
For form-based applications, use CsrfTokenRepository:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) // Store CSRF token in a cookie
);
return http.build();
}
CORS Configuration with Security
If your frontend (React/Angular/Vue) is hosted on a different domain, enable CORS.
Basic CORS Configuration
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.cors(withDefaults()) // Enable CORS
.csrf(csrf -> csrf.disable()); // Disable CSRF for APIs
return http.build();
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000")); // Allowed frontend URLs
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
configuration.setAllowedHeaders(Arrays.asList("Authorization", "Content-Type"));
configuration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
We use cookies and similar technologies to enhance your browsing experience, serve personalized content and advertisements, and analyze our traffic.
By clicking "Accept All", you consent to our use of cookies and the processing of your personal data for these purposes.
You can manage your preferences or learn more in our
Privacy Policy and
Cookie Policy.