2016-07-29 2 views
0

Мне нужно включить глобальный CORS в моем загрузочном загрузочном файле api для предотвращения получения следующей ошибки, когда я вызываю api из браузера: http://localhost:8090/posts?user-id=1. В запрошенном ресурсе нет заголовка «Access-Control-Allow-Origin». Следовательно, исходный 'http://localhost' не имеет доступа. '.can not enable CORS in spring boot data rest

Я могу набрать URL-адрес в браузере и получить правильный ответ для этого ресурса, но я не могу сделать тот же звонок из ajax-вызова на веб-странице.

Любые идеи, что им не хватает?

Мой код и конфигурации ниже:

@SpringBootApplication 
@EnableAutoConfiguration 
@EnableJpaRepositories 
@EnableWebMvc 
public class Application { 

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

} 

@Bean 
public WebMvcConfigurer corsConfigurer() { 

    return new WebMvcConfigurerAdapter() { 
     @Override 
     public void addCorsMappings(CorsRegistry registry) { 
      registry.addMapping("/**"); 
     } 
    }; 
} 

@Bean 
public CommandLineRunner demo(UserRepository userRepository, PostRepository postRepository, 
           CommentRepository commentRepository, EventRepository eventRepository, VenueRepository venueRepository) { 
    return (args) -> { 

     User user = new User("fsdsdfsd","sdsdsds","121212"); 
     userRepository.save(user); 

     Venue venue = new Venue("dsaesrdfddgd","aerttyhyyty","yyyyyyyyyyyyyy"); 
     venueRepository.save(venue); 

     Event event = new Event("dsaesrdfddgd","aerttyhyyty","yyyyyyyyyyyyyy",venue,user); 
     eventRepository.save(event); 

     Post post = new Post("some posts are funny. Some are not.",user, event); 
     postRepository.save(post); 

     Comment comment = new Comment("commmentntnrnejfnerfdgdfgdfdt", user, post); 
     commentRepository.save(comment); 
    }; 
} 

}

@RepositoryRestResource 
public interface PostRepository extends PagingAndSortingRepository<Post, Long> { 


Page<Post> readBydeletedIsFalseOrderByCreated(Pageable pageRequest); 

@CrossOrigin 
Post readByIdAndDeletedIsFalse(Long postId); 

}

buildscript { 
repositories { 
    mavenCentral() 
} 
dependencies { 
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE") 
} 
} 

apply plugin: 'java' 
apply plugin: 'war' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 

jar { 
    baseName = 'project' 
    version = '0.1.0' 
} 

war { 
    baseName = 'project' 
    version = '0.1.0' 
} 


repositories { 
    mavenCentral() 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-data-rest") 
    compile("org.springframework.boot:spring-boot-starter-data-jpa") 
    compile("com.h2database:h2") 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 
+0

Привет там, пожалуйста, проверьте этот проект https://github.com/MFaisalHyder/REST_API он полностью выполнен с использованием Spring MVC4 с Spring ботинком. в вашем сообщении вам не хватает настроек фильтров для заголовков ответов, а также разрешено использовать методы происхождения, такие как GET, POST ..., которые будут использоваться из приложения. пройдите проект, если не поняли, я опишу в полном ответе. –

+0

Большое спасибо. плохо попробуйте это – gezinspace

+0

, вы получили его или хотите, чтобы я опубликовал подробный ответ, но вам также нужно разместить свою структуру проекта, так как это будет необходимо для изменения. –

ответ

1

Таким образом, после обсуждения в комментариях, что я нашел, вы можете попробовать это в ваших addCorsMappings метод

registry.addMapping("/**").allowedOrigins("http://localhost:8090") 
          .allowedMethods("PUT", "DELETE", "GET", "POST"); 
+0

, к сожалению, это не помогает, но спасибо за предложение. мне трудно поверить, что люди в Pivotal Spring будут беспокоиться о том, чтобы создать весенний отдых данных, если он не может быть использован в запросе на кросс-поиск. там должно быть ome wway для этого – gezinspace

+0

https://spring.io/blog/2015/06/08/cors-support-in-spring-framework это поможет вам –

+0

спасибо. есть раздел, который выглядит обнадеживающим - конечно же, о альтернативном подходе, основанном на фильтрах, для проектов весенней загрузки, которые в настоящее время не поддерживают родной корс (например ... data-rest lol)! Мне нужно выполнить поручение, но я стараюсь, когда вернусь. плохо сообщите, как это происходит. благодаря! – gezinspace

-1

Попробуйте добавить это на глобальной конфигурации:

registry.addMapping("/**").allowedOrigins("*");

+0

это казалось многообещающим, поэтому я поменял эту строку в своем объявлении bean-модуля WebMvcConfigurer. К сожалению, это не делало различий. – gezinspace

+0

Странно, что безупречно работает для обычных конечных точек отдыха. Я не думаю, что вам нужна аннотация @crossorigin с глобальной конфигурацией – Ulises

+0

странно. Я тоже пробовал без аннотации. – gezinspace

0

Ну добавить этот компонент помогает

@Bean 
public FilterRegistrationBean corsFilter() { 
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 
    CorsConfiguration config = new CorsConfiguration(); 
    config.setAllowCredentials(true); 
    config.addAllowedOrigin("*"); 
    config.addAllowedHeader("*"); 
    config.addAllowedMethod("GET"); 
    source.registerCorsConfiguration("/**", config); 
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); 
    bean.setOrder(0); 
    return bean; 
} 

Смешной достаточно того, что пружина не позволяет Поддержка CORS на конечных точках останова данных весны, используя следующий bean-компонент. Однако он работает по назначению с другими настраиваемыми конечными точками, созданными разработчиком.

@Bean 
public WebMvcConfigurer corsConfigurer() { 

    return new WebMvcConfigurerAdapter() { 
     @Override 
     public void addCorsMappings(CorsRegistry registry) { 
      registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET"); 
     } 
    }; 
} 
Смежные вопросы