Browse Source

@MessgeMapping support for Optional<Principal>

pull/23931/head
KateVasovski 6 years ago committed by Rossen Stoyanchev
parent
commit
f77d23de94
  1. 15
      spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java

15
spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java

@ -17,6 +17,7 @@
package org.springframework.messaging.simp.annotation.support; package org.springframework.messaging.simp.annotation.support;
import java.security.Principal; import java.security.Principal;
import java.util.Optional;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
@ -24,7 +25,7 @@ import org.springframework.messaging.handler.invocation.HandlerMethodArgumentRes
import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
/** /**
* {@link HandlerMethodArgumentResolver} to a {@link Principal}. * {@link HandlerMethodArgumentResolver} to a {@link Principal} or {@link Optional} of {@link Principal}.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @since 4.0 * @since 4.0
@ -33,17 +34,19 @@ public class PrincipalMethodArgumentResolver implements HandlerMethodArgumentRes
@Override @Override
public boolean supportsParameter(MethodParameter parameter) { public boolean supportsParameter(MethodParameter parameter) {
Class<?> paramType = parameter.getParameterType(); MethodParameter nestedParameter = parameter.nestedIfOptional();
Class<?> paramType = nestedParameter.getNestedParameterType();
return Principal.class.isAssignableFrom(paramType); return Principal.class.isAssignableFrom(paramType);
} }
@Override @Override
public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception { public Object resolveArgument(MethodParameter parameter, Message<?> message){
Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders());
if (user == null) { if (parameter.isOptional()) {
throw new MissingSessionUserException(message); return Optional.ofNullable(user);
} else {
return user;
} }
return user;
} }
} }

Loading…
Cancel
Save