Skip to content

Commit ce54a6d

Browse files
committed
Add TestAuthentication convenience method
Issue gh-14597
1 parent d169d5a commit ce54a6d

File tree

2 files changed

+28
-15
lines changed

2 files changed

+28
-15
lines changed

config/src/test/java/org/springframework/security/config/annotation/method/configuration/ReactiveMethodSecurityConfigurationTests.java

+18-14
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.List;
2121
import java.util.Map;
2222
import java.util.concurrent.ConcurrentHashMap;
23+
import java.util.function.Consumer;
2324
import java.util.function.Function;
2425

2526
import org.junit.jupiter.api.Test;
@@ -40,12 +41,14 @@
4041
import org.springframework.security.access.prepost.PostFilter;
4142
import org.springframework.security.access.prepost.PreAuthorize;
4243
import org.springframework.security.access.prepost.PreFilter;
43-
import org.springframework.security.authentication.TestingAuthenticationToken;
44+
import org.springframework.security.authentication.TestAuthentication;
4445
import org.springframework.security.authorization.method.AuthorizeReturnObject;
4546
import org.springframework.security.config.core.GrantedAuthorityDefaults;
4647
import org.springframework.security.config.test.SpringTestContext;
4748
import org.springframework.security.config.test.SpringTestContextExtension;
49+
import org.springframework.security.core.Authentication;
4850
import org.springframework.security.core.context.ReactiveSecurityContextHolder;
51+
import org.springframework.security.core.userdetails.User;
4952

5053
import static org.assertj.core.api.Assertions.assertThat;
5154

@@ -63,8 +66,7 @@ public class ReactiveMethodSecurityConfigurationTests {
6366
@Test
6467
public void rolePrefixWithGrantedAuthorityDefaults() throws NoSuchMethodException {
6568
this.spring.register(WithRolePrefixConfiguration.class).autowire();
66-
TestingAuthenticationToken authentication = new TestingAuthenticationToken("principal", "credential",
67-
"CUSTOM_ABC");
69+
Authentication authentication = TestAuthentication.authenticatedUser(authorities("CUSTOM_ABC"));
6870
MockMethodInvocation methodInvocation = new MockMethodInvocation(new Foo(), Foo.class, "bar", String.class);
6971
EvaluationContext context = this.methodSecurityExpressionHandler.createEvaluationContext(authentication,
7072
methodInvocation);
@@ -78,8 +80,7 @@ public void rolePrefixWithGrantedAuthorityDefaults() throws NoSuchMethodExceptio
7880
@Test
7981
public void rolePrefixWithDefaultConfig() throws NoSuchMethodException {
8082
this.spring.register(ReactiveMethodSecurityConfiguration.class).autowire();
81-
TestingAuthenticationToken authentication = new TestingAuthenticationToken("principal", "credential",
82-
"ROLE_ABC");
83+
Authentication authentication = TestAuthentication.authenticatedUser(authorities("ROLE_ABC"));
8384
MockMethodInvocation methodInvocation = new MockMethodInvocation(new Foo(), Foo.class, "bar", String.class);
8485
EvaluationContext context = this.methodSecurityExpressionHandler.createEvaluationContext(authentication,
8586
methodInvocation);
@@ -91,8 +92,7 @@ public void rolePrefixWithDefaultConfig() throws NoSuchMethodException {
9192
@Test
9293
public void rolePrefixWithGrantedAuthorityDefaultsAndSubclassWithProxyingEnabled() throws NoSuchMethodException {
9394
this.spring.register(SubclassConfig.class).autowire();
94-
TestingAuthenticationToken authentication = new TestingAuthenticationToken("principal", "credential",
95-
"ROLE_ABC");
95+
Authentication authentication = TestAuthentication.authenticatedUser(authorities("ROLE_ABC"));
9696
MockMethodInvocation methodInvocation = new MockMethodInvocation(new Foo(), Foo.class, "bar", String.class);
9797
EvaluationContext context = this.methodSecurityExpressionHandler.createEvaluationContext(authentication,
9898
methodInvocation);
@@ -105,7 +105,7 @@ public void rolePrefixWithGrantedAuthorityDefaultsAndSubclassWithProxyingEnabled
105105
public void findByIdWhenAuthorizedResultThenAuthorizes() {
106106
this.spring.register(AuthorizeResultConfig.class).autowire();
107107
FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
108-
TestingAuthenticationToken pilot = new TestingAuthenticationToken("user", "pass", "airplane:read");
108+
Authentication pilot = TestAuthentication.authenticatedUser(authorities("airplane:read"));
109109
StepVerifier
110110
.create(flights.findById("1")
111111
.flatMap(Flight::getAltitude)
@@ -124,7 +124,7 @@ public void findByIdWhenAuthorizedResultThenAuthorizes() {
124124
public void findByIdWhenUnauthorizedResultThenDenies() {
125125
this.spring.register(AuthorizeResultConfig.class).autowire();
126126
FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
127-
TestingAuthenticationToken pilot = new TestingAuthenticationToken("user", "pass", "seating:read");
127+
Authentication pilot = TestAuthentication.authenticatedUser(authorities("seating:read"));
128128
StepVerifier
129129
.create(flights.findById("1")
130130
.flatMap(Flight::getSeats)
@@ -142,7 +142,7 @@ public void findByIdWhenUnauthorizedResultThenDenies() {
142142
public void findAllWhenUnauthorizedResultThenDenies() {
143143
this.spring.register(AuthorizeResultConfig.class).autowire();
144144
FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
145-
TestingAuthenticationToken pilot = new TestingAuthenticationToken("user", "pass", "seating:read");
145+
Authentication pilot = TestAuthentication.authenticatedUser(authorities("seating:read"));
146146
StepVerifier
147147
.create(flights.findAll()
148148
.flatMap(Flight::getSeats)
@@ -160,7 +160,7 @@ public void findAllWhenUnauthorizedResultThenDenies() {
160160
public void removeWhenAuthorizedResultThenRemoves() {
161161
this.spring.register(AuthorizeResultConfig.class).autowire();
162162
FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
163-
TestingAuthenticationToken pilot = new TestingAuthenticationToken("user", "pass", "seating:read");
163+
Authentication pilot = TestAuthentication.authenticatedUser(authorities("seating:read"));
164164
StepVerifier.create(flights.remove("1").contextWrite(ReactiveSecurityContextHolder.withAuthentication(pilot)))
165165
.verifyComplete();
166166
}
@@ -169,7 +169,7 @@ public void removeWhenAuthorizedResultThenRemoves() {
169169
public void findAllWhenPostFilterThenFilters() {
170170
this.spring.register(AuthorizeResultConfig.class).autowire();
171171
FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
172-
TestingAuthenticationToken pilot = new TestingAuthenticationToken("user", "pass", "airplane:read");
172+
Authentication pilot = TestAuthentication.authenticatedUser(authorities("airplane:read"));
173173
StepVerifier
174174
.create(flights.findAll()
175175
.flatMap(Flight::getPassengers)
@@ -183,7 +183,7 @@ public void findAllWhenPostFilterThenFilters() {
183183
public void findAllWhenPreFilterThenFilters() {
184184
this.spring.register(AuthorizeResultConfig.class).autowire();
185185
FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
186-
TestingAuthenticationToken pilot = new TestingAuthenticationToken("user", "pass", "airplane:read");
186+
Authentication pilot = TestAuthentication.authenticatedUser(authorities("airplane:read"));
187187
StepVerifier
188188
.create(flights.findAll()
189189
.flatMap((flight) -> flight.board(Flux.just("John Doe", "John")).then(Mono.just(flight)))
@@ -198,7 +198,7 @@ public void findAllWhenPreFilterThenFilters() {
198198
public void findAllWhenNestedPreAuthorizeThenAuthorizes() {
199199
this.spring.register(AuthorizeResultConfig.class).autowire();
200200
FlightRepository flights = this.spring.getContext().getBean(FlightRepository.class);
201-
TestingAuthenticationToken pilot = new TestingAuthenticationToken("user", "pass", "seating:read");
201+
Authentication pilot = TestAuthentication.authenticatedUser(authorities("seating:read"));
202202
StepVerifier
203203
.create(flights.findAll()
204204
.flatMap(Flight::getPassengers)
@@ -207,6 +207,10 @@ public void findAllWhenNestedPreAuthorizeThenAuthorizes() {
207207
.verifyError(AccessDeniedException.class);
208208
}
209209

210+
private static Consumer<User.UserBuilder> authorities(String... authorities) {
211+
return (builder) -> builder.authorities(authorities);
212+
}
213+
210214
@Configuration
211215
@EnableReactiveMethodSecurity // this imports ReactiveMethodSecurityConfiguration
212216
static class WithRolePrefixConfiguration {

core/src/test/java/org/springframework/security/authentication/TestAuthentication.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2023 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,9 +16,12 @@
1616

1717
package org.springframework.security.authentication;
1818

19+
import java.util.function.Consumer;
20+
1921
import org.springframework.security.core.Authentication;
2022
import org.springframework.security.core.authority.AuthorityUtils;
2123
import org.springframework.security.core.userdetails.PasswordEncodedUser;
24+
import org.springframework.security.core.userdetails.User;
2225
import org.springframework.security.core.userdetails.UserDetails;
2326

2427
/**
@@ -42,6 +45,12 @@ public static Authentication authenticatedUser() {
4245
return authenticated(user());
4346
}
4447

48+
public static Authentication authenticatedUser(Consumer<User.UserBuilder> consumer) {
49+
User.UserBuilder builder = withUsername("user");
50+
consumer.accept(builder);
51+
return authenticated(builder.build());
52+
}
53+
4554
public static Authentication authenticated(UserDetails user) {
4655
return UsernamePasswordAuthenticationToken.authenticated(user, null, user.getAuthorities());
4756
}

0 commit comments

Comments
 (0)