50
50
import org .springframework .security .web .authentication .rememberme .TokenBasedRememberMeServices ;
51
51
import org .springframework .security .web .authentication .session .SessionAuthenticationStrategy ;
52
52
import org .springframework .security .web .firewall .DefaultHttpFirewall ;
53
+ import org .springframework .security .web .util .matcher .AntPathRequestMatcher ;
54
+ import org .springframework .security .web .util .matcher .RequestMatcher ;
53
55
import org .springframework .test .util .ReflectionTestUtils ;
54
56
55
57
/**
@@ -212,6 +214,78 @@ public void testNormalOperationWithDefaultFilterProcessesUrl() throws Exception
212
214
assertThat (request .getSession ()).isEqualTo (sessionPreAuth );
213
215
}
214
216
217
+ @ Test
218
+ public void testNormalOperationWithDefaultFilterProcessesUrlAndAuthenticationManager () throws Exception {
219
+ // Setup our HTTP request
220
+ MockHttpServletRequest request = createMockAuthenticationRequest ();
221
+ HttpSession sessionPreAuth = request .getSession ();
222
+
223
+ // Setup our filter configuration
224
+ MockFilterConfig config = new MockFilterConfig (null , null );
225
+
226
+ // Setup our expectation that the filter chain will not be invoked, as we redirect
227
+ // to defaultTargetUrl
228
+ MockFilterChain chain = new MockFilterChain (false );
229
+ MockHttpServletResponse response = new MockHttpServletResponse ();
230
+
231
+ // Setup our test object, to grant access
232
+ MockAuthenticationFilter filter = new MockAuthenticationFilter (
233
+ "/j_mock_post" , mock (AuthenticationManager .class ));
234
+
235
+ filter .setSessionAuthenticationStrategy (
236
+ mock (SessionAuthenticationStrategy .class ));
237
+ filter .setAuthenticationSuccessHandler (successHandler );
238
+ filter .setAuthenticationFailureHandler (failureHandler );
239
+ filter .afterPropertiesSet ();
240
+
241
+ // Test
242
+ filter .doFilter (request , response , chain );
243
+ assertThat (response .getRedirectedUrl ()).isEqualTo ("/mycontext/logged_in.jsp" );
244
+ assertThat (SecurityContextHolder .getContext ().getAuthentication ()).isNotNull ();
245
+ assertThat (
246
+ SecurityContextHolder .getContext ().getAuthentication ().getPrincipal ().toString ()).isEqualTo (
247
+ "test" );
248
+ // Should still have the same session
249
+ assertThat (request .getSession ()).isEqualTo (sessionPreAuth );
250
+ }
251
+
252
+ @ Test
253
+ public void testNormalOperationWithRequestMatcherAndAuthenticationManager () throws Exception {
254
+ // Setup our HTTP request
255
+ MockHttpServletRequest request = createMockAuthenticationRequest ();
256
+ request .setServletPath ("/j_eradicate_corona_virus" );
257
+ request .setRequestURI ("/mycontext/j_eradicate_corona_virus" );
258
+ HttpSession sessionPreAuth = request .getSession ();
259
+
260
+ // Setup our filter configuration
261
+ MockFilterConfig config = new MockFilterConfig (null , null );
262
+
263
+ // Setup our expectation that the filter chain will not be invoked, as we redirect
264
+ // to defaultTargetUrl
265
+ MockFilterChain chain = new MockFilterChain (false );
266
+ MockHttpServletResponse response = new MockHttpServletResponse ();
267
+
268
+ // Setup our test object, to grant access
269
+ MockAuthenticationFilter filter = new MockAuthenticationFilter (
270
+ new AntPathRequestMatcher ("/j_eradicate_corona_virus" ), mock (AuthenticationManager .class ));
271
+
272
+ filter .setSessionAuthenticationStrategy (
273
+ mock (SessionAuthenticationStrategy .class ));
274
+ filter .setAuthenticationSuccessHandler (successHandler );
275
+ filter .setAuthenticationFailureHandler (failureHandler );
276
+ filter .afterPropertiesSet ();
277
+
278
+ // Test
279
+ filter .doFilter (request , response , chain );
280
+ assertThat (response .getRedirectedUrl ()).isEqualTo ("/mycontext/logged_in.jsp" );
281
+ assertThat (SecurityContextHolder .getContext ().getAuthentication ()).isNotNull ();
282
+ assertThat (
283
+ SecurityContextHolder .getContext ().getAuthentication ().getPrincipal ().toString ()).isEqualTo (
284
+ "test" );
285
+ // Should still have the same session
286
+ assertThat (request .getSession ()).isEqualTo (sessionPreAuth );
287
+ }
288
+
215
289
@ Test
216
290
public void testStartupDetectsInvalidAuthenticationManager () {
217
291
AbstractAuthenticationProcessingFilter filter = new MockAuthenticationFilter ();
@@ -430,20 +504,33 @@ public void setRememberMeServicesShouldntAllowNulls() {
430
504
private class MockAuthenticationFilter
431
505
extends AbstractAuthenticationProcessingFilter {
432
506
507
+ private static final String DEFAULT_FILTER_PROCESSING_URL = "/j_mock_post" ;
508
+
433
509
private AuthenticationException exceptionToThrow ;
434
510
435
511
private boolean grantAccess ;
436
512
437
513
MockAuthenticationFilter (boolean grantAccess ) {
438
514
this ();
439
- setRememberMeServices ( new NullRememberMeServices () );
515
+ setupRememberMeServicesAndAuthenticationException ( );
440
516
this .grantAccess = grantAccess ;
441
- this .exceptionToThrow = new BadCredentialsException (
442
- "Mock requested to do so" );
443
517
}
444
518
445
519
private MockAuthenticationFilter () {
446
- super ("/j_mock_post" );
520
+ super (DEFAULT_FILTER_PROCESSING_URL );
521
+ }
522
+
523
+ private MockAuthenticationFilter (String defaultFilterProcessingUrl , AuthenticationManager authenticationManager ) {
524
+ super (defaultFilterProcessingUrl , authenticationManager );
525
+ setupRememberMeServicesAndAuthenticationException ();
526
+ this .grantAccess = true ;
527
+ }
528
+
529
+ private MockAuthenticationFilter (RequestMatcher requiresAuthenticationRequestMatcher ,
530
+ AuthenticationManager authenticationManager ) {
531
+ super (requiresAuthenticationRequestMatcher , authenticationManager );
532
+ setupRememberMeServicesAndAuthenticationException ();
533
+ this .grantAccess = true ;
447
534
}
448
535
449
536
public Authentication attemptAuthentication (HttpServletRequest request ,
@@ -456,6 +543,13 @@ public Authentication attemptAuthentication(HttpServletRequest request,
456
543
throw exceptionToThrow ;
457
544
}
458
545
}
546
+
547
+ private void setupRememberMeServicesAndAuthenticationException () {
548
+ setRememberMeServices (new NullRememberMeServices ());
549
+ this .exceptionToThrow = new BadCredentialsException (
550
+ "Mock requested to do so" );
551
+ }
552
+
459
553
}
460
554
461
555
private class MockFilterChain implements FilterChain {
0 commit comments