요약
AbstractJsonpResponseBodyAdvice을 상속받아 사용하는 프로젝트는 Spring 버전을 2.0.x로 유지하거나, 버전업 이후 JSONP 응답을 직접 개발해야 레거시 시스템에서 Ajax jsopn 호출히 오류가 발생하지 않는다.
(SpringBoot 2.1 부터는 JSONP 응답을 지원하지 않음, 라이브러리 또한 미지원)
내용
레거시 시스템 고도화 작업중 CORS 소스가 존재함을 확인
레거시 CORS 소스
@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
super("callback");
}
}
해당 소스를 리팩토링하여 아래 코드로 변경함.
@Configuration
public class WebConfig implements WebMvcConfigurer {
// Spring Boot 버전업 대응으로 처리해두었음. JsonpAdvice 클래스 제거 후 사용
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 모든 요청을 뜻한다.
.allowedOrigins("*") // 전체 허용
.allowedHeaders("*")
.allowedMethods("*")
.allowCredentials(true)
;
}
}
시스템 운영 중 크롬에서 CORB 오류 발생하여 내용 확인 결과.
AJAX의 jsonp를 사용하는 코드를 확인함.
$.ajax({
dataType: 'jsonp',
url: 'url',
success: function (res) {
console.log("topad contents play ---- ");
console.log(res);
},
error:function(request,status,error){
console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
}
});
리팩토링된 소스는 jsonp 방식을 지원하지 않고, 응답값이 jsonp 형식이 아닌 json 응답 형태를 갖추게 되어 브라우저내 오류 발생
위 오류로 CORS 부분과 라이브러리 버전을 롤백함
참고자료
Spring jsonp 응답 : https://www.baeldung.com/spring-jackson-jsonp
jsonp 미사용관련 공식 문서(AbstractJsonpResponseBodyAdvice Removed) : https://docs.spring.io/spring-framework/docs/4.3.17.RELEASE_to_4.3.18.RELEASE/Spring%20Framework%204.3.18.RELEASE/org/springframework/web/servlet/mvc/method/annotation/AbstractJsonpResponseBodyAdvice.html
'SpringFramework > Spring' 카테고리의 다른 글
Spring Boot 어플리케이션 설정 공식 문서 (0) | 2021.05.04 |
---|---|
SpringBoot CORS (WebMvcConfigurer 사용) 적용 방법 (0) | 2021.04.13 |
MapStruct 설정 (ModelMapper 대안) (0) | 2021.03.23 |
gradle is not abstract and does not override abstract method getValue() 오류 (0) | 2021.03.22 |
AbstractJsonpResponseBodyAdvice Deprecated 대응 (0) | 2021.03.19 |