Skip to content

Commit ba39697

Browse files
committed
Expose Principal in ServerRequest
This commit exposes the Principal in ServerRequest. Issue: SPR-15552
1 parent 94efbe2 commit ba39697

File tree

5 files changed

+46
-3
lines changed

5 files changed

+46
-3
lines changed

spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java

+6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.net.InetSocketAddress;
2020
import java.net.URI;
2121
import java.nio.charset.Charset;
22+
import java.security.Principal;
2223
import java.util.Collections;
2324
import java.util.List;
2425
import java.util.Locale;
@@ -157,6 +158,11 @@ public Mono<WebSession> session() {
157158
return this.exchange.getSession();
158159
}
159160

161+
@Override
162+
public Mono<? extends Principal> principal() {
163+
return this.exchange.getPrincipal();
164+
}
165+
160166
private ServerHttpRequest request() {
161167
return this.exchange.getRequest();
162168
}

spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RequestPredicates.java

+6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.web.reactive.function.server;
1818

1919
import java.net.URI;
20+
import java.security.Principal;
2021
import java.util.Arrays;
2122
import java.util.Collections;
2223
import java.util.HashSet;
@@ -543,6 +544,11 @@ public Mono<WebSession> session() {
543544
return this.request.session();
544545
}
545546

547+
@Override
548+
public Mono<? extends Principal> principal() {
549+
return this.request.principal();
550+
}
551+
546552
@Override
547553
public String toString() {
548554
return method() + " " + path();

spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerRequest.java

+6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.net.InetSocketAddress;
2020
import java.net.URI;
2121
import java.nio.charset.Charset;
22+
import java.security.Principal;
2223
import java.util.List;
2324
import java.util.Locale;
2425
import java.util.Map;
@@ -168,6 +169,11 @@ default String pathVariable(String name) {
168169
*/
169170
Mono<WebSession> session();
170171

172+
/**
173+
* Return the authenticated user for the request, if any.
174+
*/
175+
Mono<? extends Principal> principal();
176+
171177

172178
/**
173179
* Represents the headers of the HTTP request.

spring-webflux/src/main/java/org/springframework/web/reactive/function/server/support/ServerRequestWrapper.java

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.net.InetSocketAddress;
2020
import java.net.URI;
2121
import java.nio.charset.Charset;
22+
import java.security.Principal;
2223
import java.util.List;
2324
import java.util.Locale;
2425
import java.util.Map;
@@ -144,6 +145,10 @@ public Mono<WebSession> session() {
144145
return this.delegate.session();
145146
}
146147

148+
@Override
149+
public Mono<? extends Principal> principal() {
150+
return this.delegate.principal();
151+
}
147152

148153
/**
149154
* Implementation of the {@code Headers} interface that can be subclassed

spring-webflux/src/test/java/org/springframework/web/reactive/function/server/MockServerRequest.java

+23-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.net.InetSocketAddress;
2020
import java.net.URI;
2121
import java.nio.charset.Charset;
22+
import java.security.Principal;
2223
import java.time.Instant;
2324
import java.time.ZoneId;
2425
import java.time.ZonedDateTime;
@@ -66,11 +67,12 @@ public class MockServerRequest implements ServerRequest {
6667

6768
private final WebSession session;
6869

70+
private Principal principal;
6971

7072
private MockServerRequest(HttpMethod method, URI uri,
7173
MockHeaders headers, Object body, Map<String, Object> attributes,
7274
MultiValueMap<String, String> queryParams,
73-
Map<String, String> pathVariables, WebSession session) {
75+
Map<String, String> pathVariables, WebSession session, Principal principal) {
7476

7577
this.method = method;
7678
this.uri = uri;
@@ -80,6 +82,7 @@ private MockServerRequest(HttpMethod method, URI uri,
8082
this.queryParams = queryParams;
8183
this.pathVariables = pathVariables;
8284
this.session = session;
85+
this.principal = principal;
8386
}
8487

8588

@@ -148,6 +151,10 @@ public Mono<WebSession> session() {
148151
return Mono.justOrEmpty(this.session);
149152
}
150153

154+
@Override
155+
public Mono<? extends Principal> principal() {
156+
return Mono.justOrEmpty(this.principal);
157+
}
151158

152159
public static Builder builder() {
153160
return new BuilderImpl();
@@ -178,6 +185,8 @@ public interface Builder {
178185

179186
Builder session(WebSession session);
180187

188+
Builder session(Principal principal);
189+
181190
MockServerRequest body(Object body);
182191

183192
MockServerRequest build();
@@ -202,6 +211,8 @@ private static class BuilderImpl implements Builder {
202211

203212
private WebSession session;
204213

214+
private Principal principal;
215+
205216
@Override
206217
public Builder method(HttpMethod method) {
207218
Assert.notNull(method, "'method' must not be null");
@@ -283,17 +294,26 @@ public Builder session(WebSession session) {
283294
return this;
284295
}
285296

297+
@Override
298+
public Builder session(Principal principal) {
299+
Assert.notNull(principal, "'principal' must not be null");
300+
this.principal = principal;
301+
return this;
302+
}
303+
286304
@Override
287305
public MockServerRequest body(Object body) {
288306
this.body = body;
289307
return new MockServerRequest(this.method, this.uri, this.headers, this.body,
290-
this.attributes, this.queryParams, this.pathVariables, this.session);
308+
this.attributes, this.queryParams, this.pathVariables, this.session,
309+
this.principal);
291310
}
292311

293312
@Override
294313
public MockServerRequest build() {
295314
return new MockServerRequest(this.method, this.uri, this.headers, null,
296-
this.attributes, this.queryParams, this.pathVariables, this.session);
315+
this.attributes, this.queryParams, this.pathVariables, this.session,
316+
this.principal);
297317
}
298318
}
299319

0 commit comments

Comments
 (0)