Собственная глобальная поддержка 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);
// ...