Skip to content

Commit c60479b

Browse files
committed
feat(security): enhance security configuration with refined request authorization and CORS settings
1 parent 5b734c8 commit c60479b

1 file changed

Lines changed: 23 additions & 10 deletions

File tree

api/src/main/java/com/orderflow/ecommerce/config/SecurityConfig.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,54 @@
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;
1217
import org.springframework.web.cors.CorsConfiguration;
1318
import org.springframework.web.cors.CorsConfigurationSource;
1419
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
1520

16-
import java.util.List;
17-
1821
@Configuration
1922
@EnableWebSecurity
2023
public class SecurityConfig {
2124

2225
@Bean
2326
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
2427
http
25-
.csrf(AbstractHttpConfigurer::disable) // Desabilita CSRF (comum em APIs REST)
28+
.csrf(AbstractHttpConfigurer::disable)
2629
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
27-
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // API sem estado
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)))
2835
.authorizeHttpRequests(auth -> auth
29-
.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()
3047
);
31-
48+
//
3249
return http.build();
3350
}
3451

35-
/**
36-
* Origens do front local e do compose: Vite (5173) e nginx da web (4173).
37-
* Evita {@code allowedOriginPatterns("*")} com {@code allowCredentials(true)}, combinação inválida na especificação CORS.
38-
*/
3952
@Bean
4053
public CorsConfigurationSource corsConfigurationSource() {
4154
CorsConfiguration configuration = new CorsConfiguration();

0 commit comments

Comments
 (0)