22
33import ita .tinybite .domain .auth .entity .JwtTokenProvider ;
44import lombok .RequiredArgsConstructor ;
5+ import lombok .extern .slf4j .Slf4j ;
56import org .jetbrains .annotations .NotNull ;
67import org .springframework .messaging .Message ;
78import org .springframework .messaging .MessageChannel ;
1415/**
1516 * http가 아닌, 웹소켓에서 인증을 위한 인터셉터 (filter는 사용 안됨)
1617 */
18+ @ Slf4j
1719@ Component
1820@ RequiredArgsConstructor
1921public class StompAuthInterceptor implements ChannelInterceptor {
@@ -23,12 +25,18 @@ public class StompAuthInterceptor implements ChannelInterceptor {
2325 @ Override
2426 public Message <?> preSend (@ NotNull Message <?> message , @ NotNull MessageChannel channel ) {
2527 StompHeaderAccessor accessor = MessageHeaderAccessor .getAccessor (message , StompHeaderAccessor .class );
28+ log .info ("StompAuthInterceptor preSend" );
2629
2730 if (StompCommand .CONNECT .equals (accessor .getCommand ())) {
28- String auth = accessor .getFirstNativeHeader ("Authorization" ). substring ( "Bearer " . length () );
31+ String authHeader = accessor .getFirstNativeHeader ("Authorization" );
2932
30- jwtTokenProvider .validateToken (auth );
31- Long userId = jwtTokenProvider .getUserId (auth );
33+ if (authHeader == null || !authHeader .startsWith ("Bearer " )) {
34+ throw new IllegalArgumentException ("Missing or invalid Authorization header" );
35+ }
36+
37+ String token = authHeader .substring (7 );
38+ jwtTokenProvider .validateToken (token );
39+ Long userId = jwtTokenProvider .getUserId (token );
3240 accessor .getSessionAttributes ().put ("userId" , userId );
3341 }
3442 return message ;
0 commit comments