SocketConfig 설정
STOMP를 사용하기 위해 WebSocketMessageBrokerConfigurer를 상속해 클래스를 생성했다. Java Spring Security에서 CORS 설정이 되어있을 때 setAllowedOrigins에 와일드카드(*)을 사용할 수 없어 필요한 Origins를 구체적으로 입력을 했다.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/gs-guide-websocket")
.setAllowedOrigins("http://localhost:3000","http://172.20.10.2:3000")
.withSockJS();
}
}
Filter 설정
CORS 설정 때문에 Filter 쪽에도 Origin에 대한 코드를 작성해줬다.
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
String origin = request.getHeader("Origin");
response.setHeader("Access-Control-Allow-Origin",
allowedOrigins.contains(origin) ? origin : "");
response.setHeader("Vary", "Origin");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, " + "X-CSRF-TOKEN");
}
}
ChatController 작성
Sub, Pub를 채팅방 번호(chatId)를 기준으로 설정을 했다.
@Controller
@RequiredArgsConstructor
public class ChattingEndpoint {
private final ChatService chatService;
@MessageMapping("/chat/{chatId}")
@SendTo("/topic/chat/{chatId}")
public ChatResponse chatting(ChatRequest chatRequest,
@DestinationVariable String chatId) throws Exception {
var chatLog = chatService.saveChatLog(chatRequest.toChatLog(Long.valueOf(chatId)));
return ChatResponse.from(chatLog);
}
}
'개발공부' 카테고리의 다른 글
JavaSpring @RequestHeader 사용시 주의점 (1) | 2024.04.07 |
---|---|
[ IDE ] IntelliJ 터미널 한글이 깨지는 문제 (0) | 2023.06.13 |
[ JPA ] QueryDSL Select에 DTO 사용하는 경우 자동 조인 (0) | 2023.05.21 |
[ Java ] Boxed Type 비교 (0) | 2023.03.19 |
[ Java Spring ] List 정렬하기 (0) | 2022.12.19 |