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