|
43 | 43 | import org.springframework.security.authentication.AbstractAuthenticationToken;
|
44 | 44 | import org.springframework.security.authentication.AnonymousAuthenticationToken;
|
45 | 45 | import org.springframework.security.authentication.AuthenticationTrustResolver;
|
| 46 | +import org.springframework.security.authentication.TestAuthentication; |
46 | 47 | import org.springframework.security.authentication.TestingAuthenticationToken;
|
47 | 48 | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
| 49 | +import org.springframework.security.core.Authentication; |
48 | 50 | import org.springframework.security.core.Transient;
|
49 | 51 | import org.springframework.security.core.authority.AuthorityUtils;
|
50 | 52 | import org.springframework.security.core.context.SecurityContext;
|
51 | 53 | import org.springframework.security.core.context.SecurityContextHolder;
|
52 | 54 | import org.springframework.security.core.context.SecurityContextImpl;
|
| 55 | +import org.springframework.security.core.context.TransientSecurityContext; |
53 | 56 | import org.springframework.security.core.userdetails.User;
|
54 | 57 | import org.springframework.security.core.userdetails.UserDetails;
|
55 | 58 |
|
@@ -587,6 +590,68 @@ public void failsWithStandardResponse() {
|
587 | 590 | assertThatIllegalStateException().isThrownBy(() -> repo.saveContext(context, request, response));
|
588 | 591 | }
|
589 | 592 |
|
| 593 | + @Test |
| 594 | + public void saveContextWhenTransientSecurityContextThenSkipped() { |
| 595 | + HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository(); |
| 596 | + MockHttpServletRequest request = new MockHttpServletRequest(); |
| 597 | + MockHttpServletResponse response = new MockHttpServletResponse(); |
| 598 | + HttpRequestResponseHolder holder = new HttpRequestResponseHolder(request, response); |
| 599 | + SecurityContext context = repo.loadContext(holder); |
| 600 | + SecurityContext transientSecurityContext = new TransientSecurityContext(); |
| 601 | + Authentication authentication = TestAuthentication.authenticatedUser(); |
| 602 | + transientSecurityContext.setAuthentication(authentication); |
| 603 | + repo.saveContext(transientSecurityContext, holder.getRequest(), holder.getResponse()); |
| 604 | + MockHttpSession session = (MockHttpSession) request.getSession(false); |
| 605 | + assertThat(session).isNull(); |
| 606 | + } |
| 607 | + |
| 608 | + @Test |
| 609 | + public void saveContextWhenTransientSecurityContextSubclassThenSkipped() { |
| 610 | + HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository(); |
| 611 | + MockHttpServletRequest request = new MockHttpServletRequest(); |
| 612 | + MockHttpServletResponse response = new MockHttpServletResponse(); |
| 613 | + HttpRequestResponseHolder holder = new HttpRequestResponseHolder(request, response); |
| 614 | + SecurityContext context = repo.loadContext(holder); |
| 615 | + SecurityContext transientSecurityContext = new TransientSecurityContext() { |
| 616 | + }; |
| 617 | + Authentication authentication = TestAuthentication.authenticatedUser(); |
| 618 | + transientSecurityContext.setAuthentication(authentication); |
| 619 | + repo.saveContext(transientSecurityContext, holder.getRequest(), holder.getResponse()); |
| 620 | + MockHttpSession session = (MockHttpSession) request.getSession(false); |
| 621 | + assertThat(session).isNull(); |
| 622 | + } |
| 623 | + |
| 624 | + @Test |
| 625 | + public void saveContextWhenTransientSecurityContextAndSessionExistsThenSkipped() { |
| 626 | + HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository(); |
| 627 | + MockHttpServletRequest request = new MockHttpServletRequest(); |
| 628 | + request.getSession(); // ensure the session exists |
| 629 | + MockHttpServletResponse response = new MockHttpServletResponse(); |
| 630 | + HttpRequestResponseHolder holder = new HttpRequestResponseHolder(request, response); |
| 631 | + SecurityContext context = repo.loadContext(holder); |
| 632 | + SecurityContext transientSecurityContext = new TransientSecurityContext(); |
| 633 | + Authentication authentication = TestAuthentication.authenticatedUser(); |
| 634 | + transientSecurityContext.setAuthentication(authentication); |
| 635 | + repo.saveContext(transientSecurityContext, holder.getRequest(), holder.getResponse()); |
| 636 | + MockHttpSession session = (MockHttpSession) request.getSession(false); |
| 637 | + assertThat(Collections.list(session.getAttributeNames())).isEmpty(); |
| 638 | + } |
| 639 | + |
| 640 | + @Test |
| 641 | + public void saveContextWhenTransientSecurityContextWithCustomAnnotationThenSkipped() { |
| 642 | + HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository(); |
| 643 | + MockHttpServletRequest request = new MockHttpServletRequest(); |
| 644 | + MockHttpServletResponse response = new MockHttpServletResponse(); |
| 645 | + HttpRequestResponseHolder holder = new HttpRequestResponseHolder(request, response); |
| 646 | + SecurityContext context = repo.loadContext(holder); |
| 647 | + SecurityContext transientSecurityContext = new TransientSecurityContext(); |
| 648 | + Authentication authentication = TestAuthentication.authenticatedUser(); |
| 649 | + transientSecurityContext.setAuthentication(authentication); |
| 650 | + repo.saveContext(transientSecurityContext, holder.getRequest(), holder.getResponse()); |
| 651 | + MockHttpSession session = (MockHttpSession) request.getSession(false); |
| 652 | + assertThat(session).isNull(); |
| 653 | + } |
| 654 | + |
590 | 655 | @Test
|
591 | 656 | public void saveContextWhenTransientAuthenticationThenSkipped() {
|
592 | 657 | HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository();
|
|
0 commit comments