11package com .magmusacy .chat .chatapp .config ;
22
33import com .magmusacy .chat .chatapp .auth .JwtService ;
4+ import com .magmusacy .chat .chatapp .user .User ;
5+ import com .magmusacy .chat .chatapp .user .UserService ;
46import lombok .RequiredArgsConstructor ;
57import org .springframework .messaging .Message ;
68import org .springframework .messaging .MessageChannel ;
1517import org .springframework .stereotype .Component ;
1618import org .springframework .util .StringUtils ;
1719
20+ import java .security .Principal ;
21+
1822@ Component
1923@ RequiredArgsConstructor
20- public class WebSocketAuthenticationInterceptor implements ChannelInterceptor {
24+ public class JwtInterceptor implements ChannelInterceptor {
2125 private final JwtService jwtService ;
2226 private final UserDetailsService userDetailsService ;
27+ private final UserService userService ;
2328
2429 @ Override
2530 public Message <?> preSend (Message <?> message , MessageChannel channel ) {
2631 StompHeaderAccessor accessor = MessageHeaderAccessor .getAccessor (message , StompHeaderAccessor .class );
27-
2832 if (StompCommand .CONNECT .equals (accessor .getCommand ())) {
2933 String authorizationHeader = accessor .getFirstNativeHeader ("Authorization" );
3034 if (StringUtils .hasText (authorizationHeader ) && authorizationHeader .startsWith ("Bearer " )) {
@@ -37,10 +41,24 @@ public Message<?> preSend(Message<?> message, MessageChannel channel) {
3741 UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken (
3842 userDetails , null , userDetails .getAuthorities ()
3943 );
44+
45+ User user = userService .findByEmail (username );
46+ userService .handleUserLogin (user );
47+
48+ // This could be authToken.getPrincipal() ???
4049 accessor .setUser (authToken );
41- SecurityContextHolder .getContext ().setAuthentication (authToken );
4250 }
4351 }
52+ } else {
53+ throw new IllegalStateException ("No JWT token supplied." );
54+ }
55+ }
56+
57+ if (StompCommand .DISCONNECT .equals (accessor .getCommand ())) {
58+ Principal potentialUser = accessor .getUser ();
59+ if (potentialUser != null ) {
60+ User user = userService .findByEmail (potentialUser .getName ());
61+ userService .handleUserLogout (user );
4462 }
4563 }
4664
0 commit comments