[Spring Security JWT] 클래식 허브_5

okonys·2025년 9월 25일

클래식 허브

목록 보기
8/8

[CORS]

프론트엔드 서버랑 백엔드 서버를 나눠서 구현하면 포트가 서로 달라서 웹브라우저가 교차 출처 리소스 공유를 금지시키면서 데이터가 안 보인다.

백엔드에서 CORS 설정을 해주어야 함.

  • SecurityConfig.java
@Bean
	public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
		
		http.cors((cors)-> cors.configurationSource(new CorsConfigurationSource() {
			@Override
			public CorsConfiguration getCorsConfiguration(HttpServletRequest request) {
				CorsConfiguration configuration = new CorsConfiguration();

                configuration.setAllowedOrigins(Collections.singletonList("http://localhost:3000"));
                configuration.setAllowedMethods(Collections.singletonList("*"));
                configuration.setAllowCredentials(true);
                configuration.setAllowedHeaders(Collections.singletonList("*"));
                configuration.setMaxAge(3600L);

									configuration.setExposedHeaders(Collections.singletonList("Authorization"));

                return configuration;
			}
		}));
		
		// csrf disable
		http.csrf((auth) -> auth.disable());
		
		// Form 로그인 방식 disable
		http.formLogin((auth) -> auth.disable());
		
		// http basic 인증 방식 disable
		http.httpBasic((auth) -> auth.disable());
		
		// 경로별 인가 작업
		http.authorizeHttpRequests((auth) -> auth	
					.requestMatchers("/login", "/","/join").permitAll()			// 이 경로에 대해서는 모든 권한을 허가한다.
					.requestMatchers("/admin").hasRole("ADMIN")					// 이 경로에 대해서는 해당 권한이 있는 사용자만 접근을 허가한다.
					.anyRequest().authenticated()								// 그 외 경로에는 로그인된 사용자만 권한을 허가한다.
				);
		
		// JWTFilter 등록
		http.addFilterBefore(new JWTFilter(jwtutil), LoginFilter.class);
		
		// 커스텀 필터 추가
		http.addFilterAt(new LoginFilter(authenticationManager(authenticationConfiguration),jwtutil), UsernamePasswordAuthenticationFilter.class);
		
		// 세션 설정
		http.sessionManagement((session) -> session
					.sessionCreationPolicy(SessionCreationPolicy.STATELESS)	// JWT를 통한 인증/인가를 위해서 세션을 STATELESS 상태로 설정.
				);
		
		
		return http.build();
	}

CorsMvcConfig 클래스를 하나 만들어주자.

  • CorsMvcConfig
package com.example.classicHub.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsMvcConfig implements WebMvcConfigurer{
	
	@Override
	public void addCorsMappings(CorsRegistry corsRegistry) {	

		corsRegistry.addMapping("/**").allowedOrigins("http://localhost:3000");
	}
}

0개의 댓글