Discover how a simple config stops your app from being blocked by browsers!
Why CORS configuration in Security in Spring Boot? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you build a web app that calls your backend API from a different website address. You try to fetch data, but the browser blocks your request silently.
Without proper CORS setup, browsers stop cross-site requests for security. Manually handling this means writing complex headers everywhere, leading to bugs and frustrated users.
Spring Boot's CORS configuration in Security lets you declare allowed origins and methods in one place. It automatically adds the right headers, making cross-site calls safe and smooth.
response.setHeader("Access-Control-Allow-Origin", "*"); // repeated in every controller
http.cors().configurationSource(request -> new CorsConfiguration().applyPermitDefaultValues());
This makes your backend safely accessible from trusted websites without messy header code everywhere.
A React frontend hosted on one domain calls a Spring Boot API on another domain seamlessly, thanks to proper CORS security setup.
Manual CORS handling is error-prone and scattered.
Spring Boot Security CORS config centralizes and simplifies cross-origin rules.
It ensures safe, smooth communication between frontend and backend on different domains.
Practice
Solution
Step 1: Understand CORS role in web security
CORS (Cross-Origin Resource Sharing) controls which external domains can call your backend APIs.Step 2: Identify the purpose in Spring Boot security
Configuring CORS in Spring Security allows safe cross-site requests by specifying allowed origins and methods.Final Answer:
To control which external websites can access your backend resources -> Option AQuick Check:
CORS controls access origins = A [OK]
- Confusing CORS with authentication
- Thinking CORS improves database speed
- Assuming CORS styles frontend
Solution
Step 1: Recall Spring Security CORS enabling syntax
Spring Security uses the methodhttp.cors()to enable CORS support.Step 2: Identify the correct chaining method
The correct chaining to disable CSRF and enable CORS ishttp.cors().and().csrf().disable();Final Answer:
http.cors().and().csrf().disable(); -> Option DQuick Check:
Enable CORS with http.cors() = C [OK]
- Using non-existent methods like enableCors()
- Forgetting to chain with .and()
- Confusing CORS enabling with CSRF
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(List.of("https://example.com", "https://app.example.com"));
configuration.setAllowedMethods(List.of("GET", "POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}Solution
Step 1: Analyze allowed origins list
The code sets allowed origins explicitly to "https://example.com" and "https://app.example.com".Step 2: Understand effect on requests
Only requests coming from these two origins will be accepted; others will be blocked by CORS policy.Final Answer:
Only requests from https://example.com and https://app.example.com are allowed -> Option CQuick Check:
Allowed origins = example.com and app.example.com = D [OK]
- Assuming all origins allowed by default
- Confusing allowed methods with allowed origins
- Thinking configuration is incomplete without headers
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins("*");
configuration.setAllowedMethods(List.of("GET", "POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}Solution
Step 1: Check setAllowedOrigins parameter type
The methodsetAllowedOriginsrequires a List<String>, but the code passes a single String "*".Step 2: Understand correct usage for wildcard
To allow all origins, useList.of("*")instead of a plain string.Final Answer:
setAllowedOrigins expects a list, not a single string -> Option BQuick Check:
Allowed origins must be List<String> = B [OK]
- Passing a string instead of a list to setAllowedOrigins
- Ignoring method parameter types
- Assuming missing HTTP methods cause errors here
Solution
Step 1: Understand wildcard origin allowance
UsingsetAllowedOrigins(List.of("*"))is deprecated and may cause issues; instead,setAllowedOriginPatternssupports wildcards properly.Step 2: Check allowed methods correctness
Only GET and POST methods are allowed as required.Final Answer:
configuration.setAllowedOriginPatterns(List.of("*")); configuration.setAllowedMethods(List.of("GET", "POST")); -> Option AQuick Check:
Use allowedOriginPatterns for wildcard origins = A [OK]
- Using setAllowedOrigins with "*" string
- Allowing extra HTTP methods by mistake
- Passing string instead of list to allowed origins
