77 lines
3.6 KiB
Java
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();
|
|
}
|
|
}
|
|
|