반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Archives
Today
Total
관리 메뉴

욱꾸미의 주꾸미 발

[SpringBoot] CORS관련 글 본문

SpringBoot

[SpringBoot] CORS관련 글

욱꾸미 2022. 3. 4. 19:25
반응형

안녕하세요.

회사에서 C#을하다 어쩌다보니 SpringBoot를 이용해 API를 만들어줄 일이 생겼습니다.

 

그러던 중 생겼던 문제해결내용에대해 기록을 남겨보고자 합니다.

 

상황에 대해 간단하게 설명드리겠습니다.

 

먼저 제가 만든 .jar파일로 구성된 api가 있습니다. .jar파일은 파일 자체에 tomcat을 내장하고 있다고합니다.

 

문제 발생상황입니다.

기본적으로 jar파일을 이용한 api를 postman으로 호출시에는 문제가 없습니다.

그러나 실제 사용할 웹에서 api를 호출시에는 cors~관련 문구가 나오며 403에러를 반환합니다.

 

찾아보니 SOP정책에 같은 Origin에서만 보낼 수 있다~로 이해 할 수 있습니다. 즉

 

같은 페이지간의 DOM 접근은 허락하지만 다른페이지의 DOM접근을 위해서는 정책 설정이필요하다.

 

로 저는 이해했습니다.

 

그럼 해당 문제의 해결책에 대해 알아볼까요?

대부분 세가지가 있다는데 저는... 사실 두 가지 방법으로 성공했습니다.

 

먼저 Cross Origin annotastion을 추가하는 방법,

두번째는 WebMvcConfigurer를 추가하는 방법입니다.

나머지하나는 필터를 설정하는 방법인데 저같은 경우는 API단만 제작하다보니 서버쪽정보를 잘 몰라서 주소를 통한 접근은 다 받아들이도록 했습니다.

 

Origin Annotation 추가

해당 방법은 각 API Annotation을 추가해주는 방식입니다. 짧아서 편하긴 한데 각 API마다 붙여줘야 한다는 단점이있습니다.

 

@CrossOrigin(origins = "*")
@RestController
	

public class CrossTest {
	@RequestMapping(method=RequestMethod.GET, path="/CrossTest")
	public String Check_Condition()
	{
		return "Cross Test Fine";
	}


}

위의 @CrossOrigin을  주목해 주세요. annotation선언 후 origins=""에 호출쪽의 주소를 기재해주면 됩니다. 그러나 저는 송신쪽을 잘모르다 보니 계속 오류가 나서 결국 요청이오면 다 받아주는 "*"로 대체했습니다. 이건 딱히 좋은 방법이 아닌것 같습니다. 이렇게하면 정책을 설정할 이유가 없어지기 때문이죠.

 

WebMvcConfigurer 방식

WebMvcConfiguerer방식은 SpringBoot의 메인(?) 부분에 작성해주면됩니다.

main함수와 같은 클래스에 작성했습니다.

    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("주소");
            }
        };
    }

이번에도 Origins안에는 송신측의 주소를 작성해주면 됩니다. addMapping은 와일드카드로 allowedOrigins뒤에 오는 추가 주소들도 받아들일 수 있게 해주는것 같습니다.

 

저같은 경우는 이렇게 두가지 방식을 이용해 CORS관련 경고를 해결했습니다.

반응형