|
|
|
@ -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; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|