hotfix: socket/#692#694
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
Code Review
This pull request introduces a custom SocketIoExceptionListener to handle invalid WebSocket requests by logging them as warnings and preventing unnecessary stack traces. The feedback suggests several improvements to align with Spring best practices, including registering the listener as a Spring Bean for better dependency injection, moving the class to a more cohesive package, and using constants for hardcoded strings.
| config.setTransports(Transport.WEBSOCKET); | ||
| config.setAuthorizationListener(authService::authorize); | ||
|
|
||
| config.setExceptionListener(new SocketIoExceptionListener()); |
Contributor
Comment on lines
+1
to
+20
| package com.process.clash.infrastructure.config.socket; | ||
|
|
||
| import com.corundumstudio.socketio.listener.DefaultExceptionListener; | ||
| import io.netty.channel.ChannelHandlerContext; | ||
| import lombok.extern.slf4j.Slf4j; | ||
|
|
||
| @Slf4j | ||
| public class SocketIoExceptionListener extends DefaultExceptionListener { | ||
|
|
||
| @Override | ||
| public boolean exceptionCaught(ChannelHandlerContext ctx, Throwable e) throws Exception { | ||
| // Upgrade 헤더가 없는 잘못된 요청(HTTP 등)이 올 때 발생하는 로그 제어 | ||
| if (e.getMessage() != null && e.getMessage().contains("not a WebSocket request")) { | ||
| log.warn("[Socket.IO] 비정상적인 연결 시도 차단: {} (IP: {})", | ||
| e.getMessage(), ctx.channel().remoteAddress()); | ||
| return true; // 에러 전파를 여기서 중단하여 불필요한 스택 트레이스 방지 | ||
| } | ||
| return super.exceptionCaught(ctx, e); | ||
| } | ||
| } No newline at end of file |
Contributor
There was a problem hiding this comment.
이 클래스는 Socket.IO 어댑터의 세부 구현 사항이므로 com.process.clash.adapter.realtime.socketio 패키지로 이동하여 응집도를 높이는 것이 좋습니다. 또한, 하드코딩된 문자열을 상수로 관리하고, Spring Bean으로 관리될 수 있도록 @Component 어노테이션을 추가하는 것을 권장합니다. 마지막으로 파일 끝에 개행 문자를 추가해 주세요.
package com.process.clash.infrastructure.config.socket;
import com.corundumstudio.socketio.listener.DefaultExceptionListener;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class SocketIoExceptionListener extends DefaultExceptionListener {
private static final String NOT_A_WEBSOCKET_REQUEST = "not a WebSocket request";
@Override
public boolean exceptionCaught(ChannelHandlerContext ctx, Throwable e) throws Exception {
// Upgrade 헤더가 없는 잘못된 요청(HTTP 등)이 올 때 발생하는 로그 제어
if (e.getMessage() != null && e.getMessage().contains(NOT_A_WEBSOCKET_REQUEST)) {
log.warn("[Socket.IO] 비정상적인 연결 시도 차단: {} (IP: {})",
e.getMessage(), ctx.channel().remoteAddress());
return true; // 에러 전파를 여기서 중단하여 불필요한 스택 트레이스 방지
}
return super.exceptionCaught(ctx, e);
}
}
hjbin-25
approved these changes
Apr 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
변경사항
관련 이슈
Closes #
추가 컨텍스트