Skip to content

Commit 193fc93

Browse files
committed
hotfix : HandShakeInterceptor 변경
1 parent de16a0e commit 193fc93

1 file changed

Lines changed: 30 additions & 20 deletions

File tree

‎src/main/java/ita/tinybite/domain/chat/service/StompAuthInterceptor.java‎

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,54 @@
44
import lombok.RequiredArgsConstructor;
55
import lombok.extern.slf4j.Slf4j;
66
import org.jetbrains.annotations.NotNull;
7+
import org.springframework.http.server.ServerHttpRequest;
8+
import org.springframework.http.server.ServerHttpResponse;
79
import org.springframework.messaging.Message;
810
import org.springframework.messaging.MessageChannel;
911
import org.springframework.messaging.simp.stomp.StompCommand;
1012
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
1113
import org.springframework.messaging.support.ChannelInterceptor;
1214
import org.springframework.messaging.support.MessageHeaderAccessor;
1315
import org.springframework.stereotype.Component;
16+
import org.springframework.web.socket.WebSocketHandler;
17+
import org.springframework.web.socket.server.HandshakeInterceptor;
18+
19+
import java.util.Map;
1420

1521
/**
1622
* http가 아닌, 웹소켓에서 인증을 위한 인터셉터 (filter는 사용 안됨)
1723
*/
1824
@Slf4j
1925
@Component
2026
@RequiredArgsConstructor
21-
public class StompAuthInterceptor implements ChannelInterceptor {
27+
public class StompAuthInterceptor implements HandshakeInterceptor {
2228

2329
private final JwtTokenProvider jwtTokenProvider;
2430

2531
@Override
26-
public Message<?> preSend(@NotNull Message<?> message, @NotNull MessageChannel channel) {
27-
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
28-
log.info("StompAuthInterceptor preSend");
29-
log.info(accessor.getCommand().toString());
30-
if(StompCommand.CONNECT.equals(accessor.getCommand())) {
31-
String authHeader = accessor.getFirstNativeHeader("Authorization");
32-
log.info("StompAuthInterceptor authHeader: {}", authHeader);
33-
34-
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
35-
throw new IllegalArgumentException("Missing or invalid Authorization header");
36-
}
37-
38-
String token = authHeader.substring(7);
39-
log.info("StompAuthInterceptor preSend token: {}", token);
40-
jwtTokenProvider.validateToken(token);
41-
Long userId = jwtTokenProvider.getUserId(token);
42-
log.info("StompAuthInterceptor preSend userId: {}", userId);
43-
accessor.getSessionAttributes().put("userId", userId);
32+
public boolean beforeHandshake(
33+
ServerHttpRequest request,
34+
ServerHttpResponse response,
35+
WebSocketHandler wsHandler,
36+
Map<String, Object> attributes
37+
) {
38+
String authHeader = request.getHeaders().getFirst("Authorization");
39+
log.info("StompAuthInterceptor authHeader: {}", authHeader);
40+
41+
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
42+
throw new IllegalArgumentException("Missing or invalid Authorization header");
4443
}
45-
return message;
44+
45+
String token = authHeader.substring(7);
46+
log.info("StompAuthInterceptor preSend token: {}", token);
47+
jwtTokenProvider.validateToken(token);
48+
Long userId = jwtTokenProvider.getUserId(token);
49+
log.info("StompAuthInterceptor preSend userId: {}", userId);
50+
attributes.put("userId", userId);
51+
return true;
52+
}
53+
54+
@Override
55+
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
4656
}
4757
}

0 commit comments

Comments
 (0)