Собственная глобальная поддержка CORS в Spring 4.2 не будет работать с CAS filterProcessesUrl

Я пытаюсь перейти на родную поддержку CORS в Spring 4.2 после обновления до spring-boot 1.3, но, похоже, он не будет работать с URL-адресом процесса фильтрации CAS (/login/cas).

Первоначально я использовал spring-boot 1.2.7 с spring 4.2 и spring-security 4.0.2, а также самодельную поддержку cors с фильтром. И либо моя собственная служба отдыха, либо URL проверки CAS ST работали хорошо. После того, как я обновился до весенней загрузки 1.3 с выходом весной и версией безопасности весны. Перестал работать. После некоторых копаний исправил это с помощью AddFilterBefore. Таким образом, CORS на фильтрованной основе, похоже, тоже хорошо работает с spring-boot 1.3.0 + spring-security-cas.

Тем не менее, я хочу использовать нативный Global CORS, но кажется, что URL проверки CAS ST (/login/cas) не может быть распознан, хотя другие остальные конечные точки в порядке.

Пожалуйста помоги.

Настройка довольно проста.

@Configuration
public class CorsConfiguration {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {

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

И следующие некоторые трафик:

    Request URL:http://localhost:9000/login/cas?ticket=ST-1357-15aQrv93jGEUsQpQRF1P-cas01.example.org
    Request Method:GET
    Status Code:302 Found

    Cache-Control:no-cache, no-store, max-age=0, must-revalidate
    Content-Length:0
    Date:Thu, 19 Nov 2015 09:19:31 GMT
    Expires:0
    Location:http://localhost:9000/
    Pragma:no-cache
    Server:Apache-Coyote/1.1
    X-Content-Type-Options:nosniff
    X-Frame-Options:DENY
    X-XSS-Protection:1; mode=block

и следующие ошибки консоли:

XMLHttpRequest cannot load http://localhost:9000/login/cas?ticket=ST-1357-15aQrv93jGEUsQpQRF1P-cas01.example.org. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

1 ответ

Решение

Встроенная поддержка CORS по умолчанию выполняется в Spring MVC HandlerMapping уровень, поэтому ожидается, что ваш фильтр CAS не будет включен CORS, так как он обрабатывает запрос раньше.

Одним из вариантов для рассмотрения является использование org.springframework.web.filter.CorsFilter мы также предоставляем Spring Framework 4.2 с AddFilterBefore подход.

Быть в курсе, что CorsConfiguration имеет не ту же конфигурацию по умолчанию, чем @CrossOrigin или же CorsRegistry, поэтому вам нужно определить большинство свойств самостоятельно, например:

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true); // you USUALLY want this
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("GET");
    config.addAllowedMethod("PUT");
    source.registerCorsConfiguration("/**", config);
    CorsFilter filter = new CorsFilter(source);
    // ...
Другие вопросы по тегам