21
21
import org .junit .After ;
22
22
import org .junit .Test ;
23
23
import org .springframework .beans .factory .annotation .Autowired ;
24
+ import org .springframework .beans .factory .support .DefaultListableBeanFactory ;
25
+ import org .springframework .boot .autoconfigure .EnableAutoConfiguration ;
26
+ import org .springframework .boot .autoconfigure .EnableAutoConfigurationImportSelector ;
24
27
import org .springframework .boot .autoconfigure .PropertyPlaceholderAutoConfiguration ;
25
28
import org .springframework .boot .autoconfigure .TestAutoConfigurationPackage ;
26
29
import org .springframework .boot .autoconfigure .jdbc .DataSourceAutoConfiguration ;
31
34
import org .springframework .boot .test .EnvironmentTestUtils ;
32
35
import org .springframework .context .ApplicationEvent ;
33
36
import org .springframework .context .ApplicationListener ;
37
+ import org .springframework .context .annotation .AnnotationConfigApplicationContext ;
34
38
import org .springframework .context .annotation .Bean ;
35
39
import org .springframework .context .annotation .Configuration ;
36
40
import org .springframework .core .annotation .Order ;
41
+ import org .springframework .core .io .DefaultResourceLoader ;
42
+ import org .springframework .core .type .StandardAnnotationMetadata ;
43
+ import org .springframework .mock .env .MockEnvironment ;
37
44
import org .springframework .mock .web .MockServletContext ;
38
45
import org .springframework .orm .jpa .JpaTransactionManager ;
39
46
import org .springframework .security .authentication .AuthenticationManager ;
45
52
import org .springframework .security .config .annotation .authentication .builders .AuthenticationManagerBuilder ;
46
53
import org .springframework .security .config .annotation .authentication .configurers .GlobalAuthenticationConfigurerAdapter ;
47
54
import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
55
+ import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
48
56
import org .springframework .security .config .annotation .web .configuration .WebSecurityConfigurerAdapter ;
49
57
import org .springframework .security .core .Authentication ;
50
58
import org .springframework .security .core .AuthenticationException ;
51
59
import org .springframework .security .core .authority .AuthorityUtils ;
52
60
import org .springframework .security .core .userdetails .UserDetailsService ;
53
61
import org .springframework .security .web .FilterChainProxy ;
54
62
import org .springframework .security .web .SecurityFilterChain ;
63
+ import org .springframework .util .ObjectUtils ;
55
64
import org .springframework .web .context .support .AnnotationConfigWebApplicationContext ;
56
65
57
66
import static org .junit .Assert .assertEquals ;
67
+ import static org .junit .Assert .assertFalse ;
58
68
import static org .junit .Assert .assertNotNull ;
59
69
import static org .junit .Assert .assertTrue ;
60
70
import static org .junit .Assert .fail ;
@@ -90,11 +100,57 @@ public void testWebConfiguration() throws Exception {
90
100
assertEquals (5 , filterChains .size ());
91
101
}
92
102
103
+ // gh-3703
104
+ @ Test
105
+ public void testDefaultFilterOrderWithSecurityAdapter () throws Exception {
106
+ this .context = new AnnotationConfigWebApplicationContext ();
107
+ this .context .setServletContext (new MockServletContext ());
108
+ this .context .register (WebSecurity .class ,
109
+ SecurityAutoConfiguration .class ,
110
+ SecurityFilterRegistrationAutoConfiguration .class ,
111
+ ServerPropertiesAutoConfiguration .class ,
112
+ PropertyPlaceholderAutoConfiguration .class );
113
+ this .context .refresh ();
114
+ assertEquals (
115
+ 0 ,
116
+ this .context .getBean ("securityFilterChainRegistration" ,
117
+ FilterRegistrationBean .class ).getOrder ());
118
+ }
119
+
120
+ @ Test
121
+ public void testSecurityFilterRegistrationAutoConfigurationRegisteredAutoConfiguration () throws Exception {
122
+ EnableAutoConfigurationImportSelector selector = new EnableAutoConfigurationImportSelector ();
123
+ selector .setBeanFactory (new DefaultListableBeanFactory ());
124
+ selector .setEnvironment (new MockEnvironment ());
125
+ selector .setResourceLoader (new DefaultResourceLoader ());
126
+ String [] imports = selector .selectImports (new StandardAnnotationMetadata (AutoConfiguration .class ));
127
+
128
+ assertTrue (ObjectUtils .containsElement (imports , "org.springframework.boot.autoconfigure.security.SecurityFilterRegistrationAutoConfiguration" ));
129
+ }
130
+
131
+ @ Test
132
+ public void testDefaultFilterOrderNotWeb () throws Exception {
133
+ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ();
134
+ context .register (SecurityAutoConfiguration .class ,
135
+ SecurityFilterRegistrationAutoConfiguration .class ,
136
+ ServerPropertiesAutoConfiguration .class ,
137
+ PropertyPlaceholderAutoConfiguration .class );
138
+
139
+ try {
140
+ context .refresh ();
141
+ assertFalse (
142
+ context .containsBean ("securityFilterChainRegistration" ));
143
+ } finally {
144
+ context .close ();
145
+ }
146
+ }
147
+
93
148
@ Test
94
149
public void testDefaultFilterOrder () throws Exception {
95
150
this .context = new AnnotationConfigWebApplicationContext ();
96
151
this .context .setServletContext (new MockServletContext ());
97
152
this .context .register (SecurityAutoConfiguration .class ,
153
+ SecurityFilterRegistrationAutoConfiguration .class ,
98
154
ServerPropertiesAutoConfiguration .class ,
99
155
PropertyPlaceholderAutoConfiguration .class );
100
156
this .context .refresh ();
@@ -110,6 +166,7 @@ public void testCustomFilterOrder() throws Exception {
110
166
EnvironmentTestUtils .addEnvironment (this .context , "security.filter-order:12345" );
111
167
this .context .setServletContext (new MockServletContext ());
112
168
this .context .register (SecurityAutoConfiguration .class ,
169
+ SecurityFilterRegistrationAutoConfiguration .class ,
113
170
ServerPropertiesAutoConfiguration .class ,
114
171
PropertyPlaceholderAutoConfiguration .class );
115
172
this .context .refresh ();
@@ -411,4 +468,11 @@ public UserDetailsService getUserDetails() {
411
468
412
469
}
413
470
471
+ @ Configuration
472
+ @ EnableWebSecurity
473
+ static class WebSecurity extends WebSecurityConfigurerAdapter {}
474
+
475
+ @ Configuration
476
+ @ EnableAutoConfiguration
477
+ static class AutoConfiguration {}
414
478
}
0 commit comments