1
0
mirror of synced 2026-05-22 21:33:16 +00:00

Polish messaging format

Issue gh-8945
This commit is contained in:
Rob Winch
2020-08-24 09:48:43 -05:00
parent 95bc670dd5
commit 38aae7f015
5 changed files with 41 additions and 16 deletions
@@ -125,11 +125,15 @@ public class AuthenticationPrincipalArgumentResolver implements HandlerMethodArg
@Override @Override
public Mono<Object> resolveArgument(MethodParameter parameter, Message<?> message) { public Mono<Object> resolveArgument(MethodParameter parameter, Message<?> message) {
ReactiveAdapter adapter = this.adapterRegistry.getAdapter(parameter.getParameterType()); ReactiveAdapter adapter = this.adapterRegistry.getAdapter(parameter.getParameterType());
return ReactiveSecurityContextHolder.getContext().map(SecurityContext::getAuthentication).flatMap((a) -> { // @formatter:off
return ReactiveSecurityContextHolder.getContext()
.map(SecurityContext::getAuthentication)
.flatMap((a) -> {
Object p = resolvePrincipal(parameter, a.getPrincipal()); Object p = resolvePrincipal(parameter, a.getPrincipal());
Mono<Object> principal = Mono.justOrEmpty(p); Mono<Object> principal = Mono.justOrEmpty(p);
return (adapter != null) ? Mono.just(adapter.fromPublisher(principal)) : principal; return (adapter != null) ? Mono.just(adapter.fromPublisher(principal)) : principal;
}); });
// @formatter:on
} }
private Object resolvePrincipal(MethodParameter parameter, Object principal) { private Object resolvePrincipal(MethodParameter parameter, Object principal) {
@@ -124,11 +124,14 @@ public class CurrentSecurityContextArgumentResolver implements HandlerMethodArgu
@Override @Override
public Mono<Object> resolveArgument(MethodParameter parameter, Message<?> message) { public Mono<Object> resolveArgument(MethodParameter parameter, Message<?> message) {
ReactiveAdapter adapter = this.adapterRegistry.getAdapter(parameter.getParameterType()); ReactiveAdapter adapter = this.adapterRegistry.getAdapter(parameter.getParameterType());
return ReactiveSecurityContextHolder.getContext().flatMap((securityContext) -> { // @formatter:off
return ReactiveSecurityContextHolder.getContext()
.flatMap((securityContext) -> {
Object sc = resolveSecurityContext(parameter, securityContext); Object sc = resolveSecurityContext(parameter, securityContext);
Mono<Object> result = Mono.justOrEmpty(sc); Mono<Object> result = Mono.justOrEmpty(sc);
return (adapter != null) ? Mono.just(adapter.fromPublisher(result)) : result; return (adapter != null) ? Mono.just(adapter.fromPublisher(result)) : result;
}); });
// @formatter:on
} }
private Object resolveSecurityContext(MethodParameter parameter, Object securityContext) { private Object resolveSecurityContext(MethodParameter parameter, Object securityContext) {
@@ -80,8 +80,11 @@ public class MessageExpressionConfigAttributeTests {
@Test @Test
public void postProcessContext() { public void postProcessContext() {
SimpDestinationMessageMatcher matcher = new SimpDestinationMessageMatcher("/topics/{topic}/**"); SimpDestinationMessageMatcher matcher = new SimpDestinationMessageMatcher("/topics/{topic}/**");
// @formatter:off
Message<?> message = MessageBuilder.withPayload("M") Message<?> message = MessageBuilder.withPayload("M")
.setHeader(SimpMessageHeaderAccessor.DESTINATION_HEADER, "/topics/someTopic/sub1").build(); .setHeader(SimpMessageHeaderAccessor.DESTINATION_HEADER, "/topics/someTopic/sub1")
.build();
// @formatter:on
EvaluationContext context = mock(EvaluationContext.class); EvaluationContext context = mock(EvaluationContext.class);
this.attribute = new MessageExpressionConfigAttribute(this.expression, matcher); this.attribute = new MessageExpressionConfigAttribute(this.expression, matcher);
this.attribute.postProcess(context, message); this.attribute.postProcess(context, message);
@@ -54,9 +54,12 @@ public class AuthenticationPrincipalArgumentResolverTests {
@Test @Test
public void resolveArgumentWhenAuthenticationPrincipalThenFound() { public void resolveArgumentWhenAuthenticationPrincipalThenFound() {
Authentication authentication = TestAuthentication.authenticatedUser(); Authentication authentication = TestAuthentication.authenticatedUser();
// @formatter:off
Mono<UserDetails> result = (Mono<UserDetails>) this.resolver Mono<UserDetails> result = (Mono<UserDetails>) this.resolver
.resolveArgument(arg0("authenticationPrincipalOnMonoUserDetails"), null) .resolveArgument(arg0("authenticationPrincipalOnMonoUserDetails"), null)
.subscriberContext(ReactiveSecurityContextHolder.withAuthentication(authentication)).block(); .subscriberContext(ReactiveSecurityContextHolder.withAuthentication(authentication))
.block();
// @formatter:on
assertThat(result.block()).isEqualTo(authentication.getPrincipal()); assertThat(result.block()).isEqualTo(authentication.getPrincipal());
} }
@@ -72,9 +75,12 @@ public class AuthenticationPrincipalArgumentResolverTests {
@Test @Test
public void resolveArgumentWhenMonoAndAuthenticationPrincipalThenFound() { public void resolveArgumentWhenMonoAndAuthenticationPrincipalThenFound() {
Authentication authentication = TestAuthentication.authenticatedUser(); Authentication authentication = TestAuthentication.authenticatedUser();
// @formatter:off
Mono<UserDetails> result = (Mono<UserDetails>) this.resolver Mono<UserDetails> result = (Mono<UserDetails>) this.resolver
.resolveArgument(arg0("currentUserOnMonoUserDetails"), null) .resolveArgument(arg0("currentUserOnMonoUserDetails"), null)
.subscriberContext(ReactiveSecurityContextHolder.withAuthentication(authentication)).block(); .subscriberContext(ReactiveSecurityContextHolder.withAuthentication(authentication))
.block();
// @formatter:on
assertThat(result.block()).isEqualTo(authentication.getPrincipal()); assertThat(result.block()).isEqualTo(authentication.getPrincipal());
} }
@@ -85,9 +91,12 @@ public class AuthenticationPrincipalArgumentResolverTests {
@Test @Test
public void resolveArgumentWhenExpressionThenFound() { public void resolveArgumentWhenExpressionThenFound() {
Authentication authentication = TestAuthentication.authenticatedUser(); Authentication authentication = TestAuthentication.authenticatedUser();
// @formatter:off
Mono<String> result = (Mono<String>) this.resolver Mono<String> result = (Mono<String>) this.resolver
.resolveArgument(arg0("authenticationPrincipalExpression"), null) .resolveArgument(arg0("authenticationPrincipalExpression"), null)
.subscriberContext(ReactiveSecurityContextHolder.withAuthentication(authentication)).block(); .subscriberContext(ReactiveSecurityContextHolder.withAuthentication(authentication))
.block();
// @formatter:on
assertThat(result.block()).isEqualTo(authentication.getName()); assertThat(result.block()).isEqualTo(authentication.getName());
} }
@@ -42,15 +42,21 @@ public class SimpMessageTypeMatcherTests {
@Test @Test
public void matchesMessageMessageTrue() { public void matchesMessageMessageTrue() {
// @formatter:off
Message<String> message = MessageBuilder.withPayload("Hi") Message<String> message = MessageBuilder.withPayload("Hi")
.setHeader(SimpMessageHeaderAccessor.MESSAGE_TYPE_HEADER, SimpMessageType.MESSAGE).build(); .setHeader(SimpMessageHeaderAccessor.MESSAGE_TYPE_HEADER, SimpMessageType.MESSAGE)
.build();
// @formatter:on
assertThat(this.matcher.matches(message)).isTrue(); assertThat(this.matcher.matches(message)).isTrue();
} }
@Test @Test
public void matchesMessageConnectFalse() { public void matchesMessageConnectFalse() {
// @formatter:off
Message<String> message = MessageBuilder.withPayload("Hi") Message<String> message = MessageBuilder.withPayload("Hi")
.setHeader(SimpMessageHeaderAccessor.MESSAGE_TYPE_HEADER, SimpMessageType.CONNECT).build(); .setHeader(SimpMessageHeaderAccessor.MESSAGE_TYPE_HEADER, SimpMessageType.CONNECT)
.build();
// @formatter:on
assertThat(this.matcher.matches(message)).isFalse(); assertThat(this.matcher.matches(message)).isFalse();
} }