복붙노트

[SPRING] 봄 부팅과 '액세스 제어 - 허용 - 원산지'

SPRING

봄 부팅과 '액세스 제어 - 허용 - 원산지'

나는 MySQL 데이터베이스를 호출 포트 8080에 노출 된 고정 표시기 컨테이너에서 실행되는 간단한 스프링 부팅 서비스가있다.

내가 localhost를 공격 할 때 : "크리스토퍼 볼튼", "제목": "테스트 제목 1", "내용", "날짜" "이것은 일부 콘텐츠입니다": 8080 / 블로그, 나는 [{ "저자는"돌아 "2017 -08-29 "}]

내가 브라우저에서 직접 공격 할 때 잘 노력하고 있습니다. 내가 jQuery를에서 그것을 시도 할 때, 나는 정상적인 액세스 제어 - 허용 - 원산지를 얻고있다.

여기 내 스프링 부팅 서비스입니다 :

@SpringBootApplication
@RestController
public class ChrisboltonServiceApplication {

public static void main(String[] args) {
    SpringApplication.run(ChrisboltonServiceApplication.class, args);
}

@Autowired
private JdbcTemplate jdbcTemplate;

@CrossOrigin
@RequestMapping(path="/blogs")
public @ResponseBody Iterable<ChrisBolton> getAllUsers() {
    List<ChrisBolton> result = jdbcTemplate.query(
            "SELECT * FROM blog",
            (rs, rowNum) -> new ChrisBolton(rs.getString("author"), 
                                               rs.getString("title"), 
                                               rs.getString("content"), 
                                               rs.getDate("date"))
    );

    return result;
}
}

여기 내 jQuery를이다 :

$.ajax({
  url: "http://localhost:8080/blogs",
  crossDomain: true
}).done(function(data) {

  console.log(data);
});

하지만 난 여전히이 오류를 얻고있다 :

XMLHttpRequest cannot load http://localhost:8080/blogs. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

나는 getAllUsers () 메서드에 @CrossOrigin를 추가하여이 시도하고 난 클래스 수준에 노력했다. 내가 포트 3000에 내 UI를 실행하고 있기 때문에 나는이 살펴 보았다하지만 링크는 특정 봄되지 않습니다.

편집하다

내 요청 헤더를 추가 :

GET /blogs HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Accept: */*
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 
Safari/537.36
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8

네트워크 탭의 응답 (크롬) :

[{ "저자": "크리스토퍼 볼튼", "제목": "시험 제목 1", "내용": "2017년 8월 29일", "날짜" "이것은 일부 콘텐츠입니다"}]

내가 다시 네트워크 탭에서 데이터를 얻고 같은 것 같습니다. 하지만, 내을 console.log (데이터) 액세스 제어 - 허용 - 원산지는 생산

해결법

  1. ==============================

    1.응용 프로그램이 추가보십시오 :

    응용 프로그램이 추가보십시오 :

    @SpringBootApplication
    @RestController
    public class ChrisboltonServiceApplication {
    
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**").allowedOrigins("*");
                }
            };
        }
    
    ...
    

    은 $ 아약스에서 진정한 () : 또한, 교차 도메인을 제거하려고합니다.

  2. ==============================

    2.당신은 @CrossOrigin ( "HTTP를 : // 로컬 호스트 : 8080") 추가 할 수있는 적절한 방법을 원하는 경우 : 8080이 요청을 허용 할 수 있습니다. 그것은 하나의 엔드 포인트 / 컨트롤러에 대한 간단한 설정입니다. 나중에 물론 사용자 정의 너무 거기에 변수를 사용할 수 있습니다.

    당신은 @CrossOrigin ( "HTTP를 : // 로컬 호스트 : 8080") 추가 할 수있는 적절한 방법을 원하는 경우 : 8080이 요청을 허용 할 수 있습니다. 그것은 하나의 엔드 포인트 / 컨트롤러에 대한 간단한 설정입니다. 나중에 물론 사용자 정의 너무 거기에 변수를 사용할 수 있습니다.

  3. from https://stackoverflow.com/questions/46065156/access-control-allow-origin-with-spring-boot by cc-by-sa and MIT license