Skip to content
This repository was archived by the owner on May 21, 2026. It is now read-only.

Commit f657ab8

Browse files
Expose CorsConfigurationSource and use in security
Add a CorsConfigurationSource bean and centralize origin parsing so the CORS policy can be reused by Spring Security. The change extracts origin parsing into parseOrigins(), configures allowed origins/methods/headers/exposed headers/credentials/maxAge and registers it for /**. SecurityConfig now injects the CorsConfigurationSource and applies it via cors(configurationSource), and CSRF disabling is updated to use AbstractHttpConfigurer::disable. Also removes duplicated parsing in addCorsMappings.
1 parent cba4731 commit f657ab8

2 files changed

Lines changed: 37 additions & 6 deletions

File tree

src/main/java/com/espacogeek/geek/config/CorsConfig.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@
55
import org.springframework.web.servlet.config.annotation.CorsRegistry;
66
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
77
import org.springframework.beans.factory.annotation.Value;
8+
import org.springframework.context.annotation.Bean;
9+
import org.springframework.web.cors.CorsConfiguration;
10+
import org.springframework.web.cors.CorsConfigurationSource;
11+
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
812

913
import java.util.Arrays;
14+
import java.util.List;
1015

1116
@Configuration
1217
public class CorsConfig implements WebMvcConfigurer {
@@ -19,10 +24,7 @@ public class CorsConfig implements WebMvcConfigurer {
1924

2025
@Override
2126
public void addCorsMappings(@NonNull CorsRegistry registry) {
22-
String[] origins = Arrays.stream(allowedOrigins.split(","))
23-
.map(String::trim)
24-
.filter(s -> !s.isEmpty())
25-
.toArray(String[]::new);
27+
String[] origins = parseOrigins();
2628

2729
registry.addMapping("/**")
2830
.allowedOrigins(origins) // exact origins, not '*'
@@ -32,4 +34,28 @@ public void addCorsMappings(@NonNull CorsRegistry registry) {
3234
.exposedHeaders("Authorization", "Content-Type")
3335
.maxAge(expirationMs / 1000); // seconds
3436
}
37+
38+
@Bean
39+
public CorsConfigurationSource corsConfigurationSource() {
40+
String[] origins = parseOrigins();
41+
42+
CorsConfiguration config = new CorsConfiguration();
43+
config.setAllowedOrigins(Arrays.asList(origins));
44+
config.setAllowedMethods(List.of("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
45+
config.setAllowedHeaders(List.of("Authorization", "Content-Type", "X-Requested-With", "Accept"));
46+
config.setExposedHeaders(List.of("Authorization", "Content-Type"));
47+
config.setAllowCredentials(true);
48+
config.setMaxAge(expirationMs / 1000);
49+
50+
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
51+
source.registerCorsConfiguration("/**", config);
52+
return source;
53+
}
54+
55+
private String[] parseOrigins() {
56+
return Arrays.stream(allowedOrigins.split(","))
57+
.map(String::trim)
58+
.filter(s -> !s.isEmpty())
59+
.toArray(String[]::new);
60+
}
3561
}

src/main/java/com/espacogeek/geek/config/SecurityConfig.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
99
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
1010
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
11+
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
1112
import org.springframework.security.config.http.SessionCreationPolicy;
1213
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
1314
import org.springframework.security.web.SecurityFilterChain;
1415
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
16+
import org.springframework.web.cors.CorsConfigurationSource;
1517

1618
import com.espacogeek.geek.services.impl.UserDetailsServiceImpl;
1719

@@ -33,6 +35,9 @@ public class SecurityConfig {
3335
@Autowired
3436
private JwtAuthenticationFilter jwtAuthenticationFilter;
3537

38+
@Autowired
39+
private CorsConfigurationSource corsConfigurationSource;
40+
3641
@Bean
3742
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
3843
return authenticationConfiguration.getAuthenticationManager();
@@ -50,8 +55,8 @@ public SecurityFilterChain configure(HttpSecurity http) throws Exception {
5055
var authenticationManager = authenticationManagerBuilder.build();
5156

5257
return http
53-
.cors(withDefaults())
54-
.csrf(csrf -> csrf.disable())
58+
.cors(cors -> cors.configurationSource(corsConfigurationSource))
59+
.csrf(AbstractHttpConfigurer::disable)
5560
.authorizeHttpRequests(auth -> {
5661
auth.requestMatchers("/", "/graphiql", "/graphiql/**", "/favicon.ico").permitAll();
5762
auth.requestMatchers("/actuator/**").permitAll();

0 commit comments

Comments
 (0)