Browse Source
The commit documents the new Authentication Builder interface and its usage in the security filter chain. Closes gh-17861 Closes gh-17862pull/17790/head
6 changed files with 92 additions and 2 deletions
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
package org.springframework.security.docs.servlet.authentication.servletauthenticationauthentication; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.security.authentication.AuthenticationManager; |
||||
import org.springframework.security.authentication.SecurityAssertions; |
||||
import org.springframework.security.authentication.TestingAuthenticationToken; |
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; |
||||
import org.springframework.security.authentication.ott.OneTimeTokenAuthentication; |
||||
import org.springframework.security.core.Authentication; |
||||
import org.springframework.security.core.authority.AuthorityUtils; |
||||
import org.springframework.security.core.context.SecurityContextHolder; |
||||
|
||||
import static org.mockito.ArgumentMatchers.any; |
||||
import static org.mockito.BDDMockito.given; |
||||
import static org.mockito.Mockito.mock; |
||||
|
||||
public class CopyAuthoritiesTests { |
||||
@Test |
||||
void toBuilderWhenApplyThenCopies() { |
||||
UsernamePasswordAuthenticationToken previous = new UsernamePasswordAuthenticationToken("alice", "pass", |
||||
AuthorityUtils.createAuthorityList("FACTOR_PASSWORD")); |
||||
SecurityContextHolder.getContext().setAuthentication(previous); |
||||
Authentication latest = new OneTimeTokenAuthentication("bob", |
||||
AuthorityUtils.createAuthorityList("FACTOR_OTT")); |
||||
AuthenticationManager authenticationManager = mock(AuthenticationManager.class); |
||||
given(authenticationManager.authenticate(any())).willReturn(latest); |
||||
Authentication authenticationRequest = new TestingAuthenticationToken("user", "pass"); |
||||
// tag::springSecurity[]
|
||||
Authentication lastestResult = authenticationManager.authenticate(authenticationRequest); |
||||
Authentication previousResult = SecurityContextHolder.getContext().getAuthentication(); |
||||
if (previousResult != null && previousResult.isAuthenticated()) { |
||||
lastestResult = lastestResult.toBuilder() |
||||
.authorities((a) -> a.addAll(previous.getAuthorities())) |
||||
.build(); |
||||
} |
||||
// end::springSecurity[]
|
||||
SecurityAssertions.assertThat(lastestResult).hasAuthorities("FACTOR_PASSWORD", "FACTOR_OTT"); |
||||
SecurityContextHolder.clearContext(); |
||||
} |
||||
} |
||||
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
package org.springframework.security.kt.docs.servlet.authentication.servletauthenticationauthentication |
||||
|
||||
import org.junit.jupiter.api.Test |
||||
import org.mockito.ArgumentMatchers |
||||
import org.mockito.BDDMockito |
||||
import org.mockito.Mockito |
||||
import org.springframework.security.authentication.AuthenticationManager |
||||
import org.springframework.security.authentication.SecurityAssertions |
||||
import org.springframework.security.authentication.TestingAuthenticationToken |
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken |
||||
import org.springframework.security.authentication.ott.OneTimeTokenAuthentication |
||||
import org.springframework.security.core.Authentication |
||||
import org.springframework.security.core.authority.AuthorityUtils |
||||
import org.springframework.security.core.context.SecurityContextHolder |
||||
|
||||
class CopyAuthoritiesTests { |
||||
@Test |
||||
fun toBuilderWhenApplyThenCopies() { |
||||
val previous: Authentication = UsernamePasswordAuthenticationToken("alice", "pass", |
||||
AuthorityUtils.createAuthorityList("FACTOR_PASSWORD")) |
||||
SecurityContextHolder.getContext().authentication = previous |
||||
var latest: Authentication = OneTimeTokenAuthentication("bob", |
||||
AuthorityUtils.createAuthorityList("FACTOR_OTT")) |
||||
val authenticationManager: AuthenticationManager = Mockito.mock(AuthenticationManager::class.java) |
||||
BDDMockito.given(authenticationManager.authenticate(ArgumentMatchers.any())).willReturn(latest) |
||||
val authenticationRequest: Authentication = TestingAuthenticationToken("user", "pass") |
||||
// tag::springSecurity[] |
||||
var latestResult: Authentication = authenticationManager.authenticate(authenticationRequest) |
||||
val previousResult = SecurityContextHolder.getContext().authentication; |
||||
if (previousResult?.isAuthenticated == true) { |
||||
latestResult = latestResult.toBuilder().authorities { a -> |
||||
a.addAll(previousResult.authorities) |
||||
}.build() |
||||
} |
||||
// end::springSecurity[] |
||||
SecurityAssertions.assertThat(latestResult).hasAuthorities("FACTOR_PASSWORD", "FACTOR_OTT") |
||||
SecurityContextHolder.clearContext() |
||||
} |
||||
} |
||||
Loading…
Reference in new issue