Files
myListBridgeAPI/src/main/java/com/global/configuration/AuthenticationConfig.java
2025-11-28 15:34:48 +09:00

77 lines
3.6 KiB
Java

package com.global.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.authentication.logout.LogoutHandler;
import lombok.RequiredArgsConstructor;
import org.springframework.web.cors.CorsConfiguration;
import java.util.List;
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class AuthenticationConfig {
private final JwtAuthenticationFilter jwtAuthFilter;
private final AuthenticationProvider authenticationProvider;
private final LogoutHandler logoutHandler;
private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
return httpSecurity
.httpBasic().disable()
.csrf().disable()
.cors(cors -> cors.configurationSource(request -> {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowedOrigins(List.of(
"http://localhost:3000",
"http://localhost:3001",
"http://127.0.0.1:3001",
"http://10.20.20.23:8080"
));
corsConfiguration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH"));
corsConfiguration.setAllowedHeaders(List.of("Authorization","Content-Type", "X-Session-Id"));
corsConfiguration.setAllowCredentials(true);
corsConfiguration.setExposedHeaders(List.of(
"Content-Disposition",
"X-Filename",
"X-File-Type",
"Content-Length"
));
return corsConfiguration;
}))
.authorizeHttpRequests()
.requestMatchers(
"/api/v1/auth/login",
"/api/v1/auth/register",
// "/api/v1/**",
"/api/v2/**"
).permitAll() // login,register은 언제나 가능
// .requestMatchers(HttpMethod.POST,"/api/v1/**").authenticated()
.anyRequest()
.authenticated()
.and()
.sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) //jwt 사용하는 경우 씀
.addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
.exceptionHandling(handler -> handler.authenticationEntryPoint(jwtAuthenticationEntryPoint))
.authenticationProvider(authenticationProvider)
.logout()
.logoutUrl("/api/v1/auth/logout")
.addLogoutHandler(logoutHandler)
.logoutSuccessHandler(((request, response, authentication) -> SecurityContextHolder.clearContext()))
.and()
.build();
}
}