11package com .orderflow .ecommerce .config ;
22
3+ import java .util .List ;
4+
35import org .springframework .context .annotation .Bean ;
46import org .springframework .context .annotation .Configuration ;
7+ import org .springframework .http .HttpMethod ;
8+ import org .springframework .http .HttpStatus ;
59import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
610import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
711import org .springframework .security .config .annotation .web .configurers .AbstractHttpConfigurer ;
812import org .springframework .security .config .http .SessionCreationPolicy ;
913import org .springframework .security .crypto .bcrypt .BCryptPasswordEncoder ;
1014import org .springframework .security .crypto .password .PasswordEncoder ;
1115import 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