Skip to content

Commit ec350c7

Browse files
committed
Update HandlerMappingIntrospector Usage in CORS support
Closes spring-projectsgh-16501 Signed-off-by: Evgeniy Cheban <[email protected]>
1 parent 5bb5d0f commit ec350c7

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

config/src/main/java/org/springframework/security/config/annotation/web/configurers/CorsConfigurer.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.util.ClassUtils;
2525
import org.springframework.web.cors.CorsConfiguration;
2626
import org.springframework.web.cors.CorsConfigurationSource;
27+
import org.springframework.web.cors.PreFlightRequestHandler;
2728
import org.springframework.web.filter.CorsFilter;
2829
import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
2930

@@ -107,15 +108,14 @@ static class MvcCorsFilter {
107108
* @return
108109
*/
109110
private static CorsFilter getMvcCorsFilter(ApplicationContext context) {
110-
if (!context.containsBean(HANDLER_MAPPING_INTROSPECTOR_BEAN_NAME)) {
111-
throw new NoSuchBeanDefinitionException(HANDLER_MAPPING_INTROSPECTOR_BEAN_NAME, "A Bean named "
112-
+ HANDLER_MAPPING_INTROSPECTOR_BEAN_NAME + " of type "
113-
+ HandlerMappingIntrospector.class.getName()
114-
+ " is required to use MvcRequestMatcher. Please ensure Spring Security & Spring MVC are configured in a shared ApplicationContext.");
111+
if (context.getBeanNamesForType(CorsConfigurationSource.class).length > 0) {
112+
CorsConfigurationSource corsConfigurationSource = context
113+
.getBean(HANDLER_MAPPING_INTROSPECTOR_BEAN_NAME, CorsConfigurationSource.class);
114+
return new CorsFilter(corsConfigurationSource);
115115
}
116-
HandlerMappingIntrospector mappingIntrospector = context.getBean(HANDLER_MAPPING_INTROSPECTOR_BEAN_NAME,
117-
HandlerMappingIntrospector.class);
118-
return new CorsFilter(mappingIntrospector);
116+
throw new NoSuchBeanDefinitionException(CorsConfigurationSource.class,
117+
"Failed to find a bean that implements `CorsConfigurationSource`. Please ensure that you are using "
118+
+ "`@EnableWebMvc`, are publishing a `WebMvcConfigurer`, or are publishing a `CorsConfigurationSource` bean.");
119119
}
120120

121121
}

config/src/test/java/org/springframework/security/config/annotation/web/configurers/CorsConfigurerTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ public void configureWhenNoMvcThenException() {
7070
assertThatExceptionOfType(BeanCreationException.class)
7171
.isThrownBy(() -> this.spring.register(DefaultCorsConfig.class).autowire())
7272
.withMessageContaining(
73-
"Please ensure Spring Security & Spring MVC are configured in a shared ApplicationContext");
73+
"Please ensure that you are using `@EnableWebMvc`, are publishing a `WebMvcConfigurer`, "
74+
+ "or are publishing a `CorsConfigurationSource` bean.");
7475
}
7576

7677
@Test

0 commit comments

Comments
 (0)