2016-01-06 3 views
2

Надеюсь, мой последний вопрос, чтобы все это работало. Используя Spring Security OAuth 2.0.8 и Spring-Web MVC 4.2.3, чтобы разоблачить конечные точки OAuth (большая часть системы использует RESTEasy для конечных точек REST, у которой есть собственный фильтр CORS).Spring-Security OAuth WebMVC Недопустимый запрос CORS

Я пытаюсь использовать глобальную поддержку CORS по умолчанию, которая теперь находится в веб-MVC 4.2.x. Однако при выдаче запроса предпросмотра теста на конечную точку/oauth/token я всегда получаю ответ 403 Invalid CORS Request. Образец запроса от Fiddler приведен ниже.

OPTIONS http://localhost:8080/myapp/oauth/token HTTP/1.1 
User-Agent: Fiddler 
Host: localhost:8080 
Origin: http://testfakeorigin.overtherainbow.com 
Access-Control-Request-Method: POST 

Даже если это проходит, и определяется как надлежащий предполетный запрос, он выглядит как запрос не в DefaultCorsProcessor в строке 81, поскольку CorsConfiguration равна нулю. Даже если я явно добавляю сопоставление реестра CORS в моем WebMvcConfigurerAdapter (который не должен быть необходимым в соответствии с документами), конфигурация по-прежнему заканчивается нулевой. Где я должен смотреть дальше?

ответ

0

Перед фактическим POST вы можете автоматически выдать запрос OPTIONS. До default разрешен только метод, указанный в вашем RequestMapping. Поэтому вам придется явно разрешить метод OPTIONS для запроса на перекрестный поиск.

Один из способов сделать это, используя глобальную конфигурацию, выглядит следующим образом:

@Override 
public void addCorsMappings(CorsRegistry registry) { 
    registry.addMapping("/**").allowedMethods("GET", "POST", "OPTIONS").allowedOrigins("http://testfakeorigin.overtherainbow.com"); 
} 

Это позволит перекрестные запросы происхождения для всех вас отображаются запросы, используя GET, POST и OPTIONS методы.

+1

Я сделал это, но для меня это не сработало, как вы можете видеть здесь: http://stackoverflow.com/questions/39307591/java-spring-rest-api-cors-not-working-for-delete -requests-через-JQuery-с-хром – mgaido

0

Вы можете настроить общий доступ к ресурсам CORS (Cross-Origin Resource Sharing) всего приложения в классе @Configuration, таким образом, все ваши контроллеры будут автоматически переопределяться. Посмотрите:

@Configuration 
@EnableWebSecurity(debug = true) 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 
    /* ... configurations */ 
    @Bean 
    public FilterRegistrationBean corsFilter() { 
     UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 
     CorsConfiguration config = new CorsConfiguration().applyPermitDefaultValues(); 
     config.addAllowedMethod(HttpMethod.POST); 
     config.addAllowedMethod(HttpMethod.GET); 
     config.addAllowedMethod(HttpMethod.PUT); 
     config.addAllowedMethod(HttpMethod.DELETE); 
     source.registerCorsConfiguration("/**", config); 
     FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); 
     bean.setOrder(Ordered.HIGHEST_PRECEDENCE); 
     return bean; 
    } 
} 

Примечание: Вы можете определить методы глаголов, которые будут применяться в вашей конфигурации

С наилучшими пожеланиями!

Смежные вопросы