Spring框架為CORS提供了一流的支持眷昆。必須在Spring Security之前處理CORS华坦,因?yàn)?pre-flight 請(qǐng)求將不包含任何cookie(即jsessionid)。如果請(qǐng)求不包含任何cookie粱腻,并且spring security是第一個(gè)燎含,那么請(qǐng)求將確定用戶沒有經(jīng)過身份驗(yàn)證(因?yàn)檎?qǐng)求中沒有cookie)伏伐,并拒絕它。
確保首先處理CORS的最簡(jiǎn)單方法是使用 CorsFilter鸠补。用戶可以使用以下方法提供 CorsConfigurationSource?萝风,從而將CorsFilter與Spring Security?集成在一起:
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
? ? @Override
? ? protected void configure(HttpSecurity http) throws Exception {
? ? ? ? http
? ? ? ? ? ? // by default uses a Bean by the name of corsConfigurationSource
? ? ? ? ? ? .cors().and()
? ? ? ? ? ? ...
? ? }
? ? @Bean
? ? CorsConfigurationSource corsConfigurationSource() {
? ? ? ? CorsConfiguration configuration = new CorsConfiguration();
? ? ? ? configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
? ? ? ? configuration.setAllowedMethods(Arrays.asList("GET","POST"));
? ? ? ? UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
? ? ? ? source.registerCorsConfiguration("/**", configuration);
? ? ? ? return source;
? ? }
}
或者適應(yīng)基于XML的配置
<http>
? ? <cors configuration-source-ref="corsSource"/>
? ? ...
</http>
<b:bean id="corsSource" class="org.springframework.web.cors.UrlBasedCorsConfigurationSource">
? ? ...
</b:bean>
如果你正在使用SpringMVC的CORS支持,那么可以省略指定 CorsConfigurationSource?紫岩,Spring Security?將利用提供給SpringMVC的CORS配置规惰。
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
? ? @Override
? ? protected void configure(HttpSecurity http) throws Exception {
? ? ? ? http
? ? ? ? ? ? // if Spring MVC is on classpath and no CorsConfigurationSource is provided,
? ? ? ? ? ? // Spring Security will use CORS configuration provided to Spring MVC
? ? ? ? ? ? .cors().and()
? ? ? ? ? ? ...
? ? }
}
or in XML
<http>
? ? <!-- Default to Spring MVC's CORS configuration -->
? ? <cors />
? ? ...
</http>