문제:
header
에Authorization
이 나타나지 않는 문제
사용기술:Spring Boot
,java
,react
,js
프로젝트(세이뷰)를 진행하는 중에 프론트엔드 팀원이 "header로 들어온 JWT를 받을 수 없다"며 찾아오셨다.
Response
값에는 Authorization
을 키 값으로 토큰이 발급되는 것을 확인할 수 있었는데 막상 헤더에서 값을 가져오려고 하니 헤더에 Authorization
를 키값으로 하는 정보가 없다고 나와서 찾아오신 것이다.
아래 블로그를 참고하여 문제를 해결하였다.
CorsConfig 클래스와 SecurityConfig 클래스를 수정하였고, 빠른 테스트를 위해 로컬에서 클라이언트와 서버 코드를 함께 돌려서 간단하게 테스트를 진행해보았다.
CorsConfig.java
추가 코드config.addExposedHeader("Authorization");
source.registerCorsConfiguration("/**", config);
SecurityConfig.java
추가 코드corsFilter
적용
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.web.filter.CorsFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod(HttpMethod.GET);
config.addAllowedMethod(HttpMethod.POST);
config.addAllowedMethod(HttpMethod.PUT);
config.addAllowedMethod(HttpMethod.DELETE);
config.addAllowedMethod(HttpMethod.HEAD);
config.addExposedHeader("Authorization"); // 추가한 코드
source.registerCorsConfiguration("/**", config); // 추가한 코드
return new CorsFilter(source);
}
}
import org.springframework.web.filter.CorsFilter;
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
private final CorsFilter corsFilter; // 추가한 코드
...
public class CustomDsl extends AbstractHttpConfigurer<CustomDsl, HttpSecurity> {
@Override
public void configure(HttpSecurity builder) {
AuthenticationManager authenticationManager = builder.getSharedObject(AuthenticationManager.class);
builder.addFilter(corsFilter) // 추가한 코드
...
}
}
}