Skip to content

Commit 99e9e2c

Browse files
authored
Merge pull request #42 from dbfcode/cursor/minimal-cors-security-fd20
fix(security): CORS restrito para dev web (correção face ao PR #23)
2 parents 5c6bfc8 + c60479b commit 99e9e2c

1 file changed

Lines changed: 46 additions & 5 deletions

File tree

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
package com.orderflow.ecommerce.config;
22

3+
import java.util.List;
4+
35
import org.springframework.context.annotation.Bean;
46
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.http.HttpMethod;
8+
import org.springframework.http.HttpStatus;
59
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
610
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
711
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
812
import org.springframework.security.config.http.SessionCreationPolicy;
913
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
1014
import org.springframework.security.crypto.password.PasswordEncoder;
1115
import org.springframework.security.web.SecurityFilterChain;
16+
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
17+
import org.springframework.web.cors.CorsConfiguration;
18+
import org.springframework.web.cors.CorsConfigurationSource;
19+
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
1220

1321
@Configuration
1422
@EnableWebSecurity
@@ -17,16 +25,49 @@ public class SecurityConfig {
1725
@Bean
1826
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
1927
http
20-
.csrf(AbstractHttpConfigurer::disable) // Desabilita CSRF (comum em APIs REST)
21-
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // API sem estado
28+
.csrf(AbstractHttpConfigurer::disable)
29+
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
30+
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
31+
.httpBasic(AbstractHttpConfigurer::disable)
32+
.formLogin(AbstractHttpConfigurer::disable)
33+
.exceptionHandling(ex -> ex.authenticationEntryPoint(
34+
new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)))
2235
.authorizeHttpRequests(auth -> auth
23-
.anyRequest().permitAll() // Por enquanto, libera tudo para você não se travar
36+
.requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
37+
.requestMatchers(
38+
"/v3/api-docs/**",
39+
"/swagger-ui/**",
40+
"/swagger-ui.html"
41+
).permitAll()
42+
.requestMatchers("/test/**").permitAll()
43+
.requestMatchers("/auth/**").permitAll()
44+
.requestMatchers(HttpMethod.GET, "/products/**", "/categories/**").permitAll()
45+
.requestMatchers("/products/**", "/categories/**").authenticated()
46+
.anyRequest().authenticated()
2447
);
25-
48+
//
2649
return http.build();
2750
}
51+
52+
@Bean
53+
public CorsConfigurationSource corsConfigurationSource() {
54+
CorsConfiguration configuration = new CorsConfiguration();
55+
configuration.setAllowedOrigins(List.of(
56+
"http://localhost:5173",
57+
"http://127.0.0.1:5173",
58+
"http://localhost:4173",
59+
"http://127.0.0.1:4173"
60+
));
61+
configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
62+
configuration.setAllowedHeaders(List.of("*"));
63+
configuration.setAllowCredentials(false);
64+
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
65+
source.registerCorsConfiguration("/**", configuration);
66+
return source;
67+
}
68+
2869
@Bean
2970
public PasswordEncoder passwordEncoder() {
3071
return new BCryptPasswordEncoder();
3172
}
32-
}
73+
}

0 commit comments

Comments
 (0)