Spring Boot | header로 Authorization 받기

yeonk·2022년 9월 26일
1

solution

목록 보기
3/3
post-thumbnail

발생한 문제 & 에러


문제: headerAuthorization 이 나타나지 않는 문제
사용기술: 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) 		// 추가한 코드
                    
    ...
                
        }
    }

}






참고 자료


react - header의 Authorization받기

0개의 댓글