if (chatRoom.getIsGroupChat().equals("N")) { throw new IllegalArgumentException("단체 채팅방이 아닙니다."); } leaveGroupChatRoom 메소드에서 이 부분이 맞나요? 개인채팅일 경우 여기에 걸려 예외가 납니다.
안녕하세요, Spring Security 필터 등록 방식에 대해 질문이 있습니다. 현재 이전까지 저는 Security 필터를 아래처럼 new 로 직접 생성해서 사용하고 있습니다. LoginFilter loginFilter = new LoginFilter(authenticationManager, loginSuccessHandler, loginFailureHandler); @Component 를 달아 Bean으로 등록하면 Spring이 Security 필터체인과 별개로 기본 서블릿 필터체인에도 자동 등록해버려서 필터가 두 번 실행되는 문제가 있기 때문입니다. 혹시 최신 Spring Boot 버전에서는 이 문제가 개선되었나요? 아니면 @Component + 생성자 주입 방식을 안전하게 사용할 수 있는 방법이 따로 있는지 궁금합니다.
안녕하세요 ~ 강의 잘 수강하고 있습니다 ! ERD 부분에서 질문이 생겨 여쭤보게 되었습니다 !! chat_participant 부분에서 전용 pk를 하나 두고 chat_room_id와 member_id를 두셨는데, 혹시 이런 경우에는 pk 자체를 chat_participant_id 라는 전용 pk 말고 chat_room_id, member_id 복합 pk로 사용해도 괜찮을까요 ? message_read_status 테이블을 따로 정규화시킨 이유가 있을까요 ? chat_message와 거의 비슷한 외래키를 쓰고 있는데 chat_message 테이블 안에 isRead 컬럼 자체를 두는 것이 더 적절하지 않은지 강의를 수강하다 궁금해서 여쭤보게 되었습니다 !! 또, 혹시 강의 내용을 공부한 부분에 대해서 학습 목적으로 블로그에 공부한 것들을 정리해서 업로드하는것이 괜찮을까요 ? 좋은 강의 제공해주셔서 너무 감사드립니다 ~~~ 오늘 설 연휴인데 새해복 많이 받으셔요 ~~
안녕하세요 강의를 토대로 프로젝트에 채팅기능을 구현중입니다. 강의에서는 StompHandler 에서 CONNECT, SUBSCRIBE 인 경우만 다루는데 저는 SEND 인 경우의 코드도 작성중입니다. SEND 시 사용자 정보를 SecurityContextHolder.getContext().setAuthentication(auth); 이런식으로 담아서 StompController 에서 SecurityContextHolder.getContext().getAuthentication().getPrincipal() 이런식으로 꺼내쓰려고 했습니다. 그런데 담을 때는 잘 담았는데, 막상 StompController에서 꺼낼 때는 비어져있다고(null) 합니다. 왜 비어져있는 지 알 수 있을까요? 그러면 사용자 정보를 가져올 수 있는 방법은 없는 건가요?
강의에서 STOMP 동작 간 /app, /topic 요청을 동시에 보낸다고 하셨는데 그럼 app 경로 발행된 메세지는 broker를 통해서 topic 경로로 전달이 되고 맨 처음에 동시에 보낸 topic 요청도 broker를 통해서 전달이 되어서 broker에서 구독하고 있는 사용자들에게 메세지를 보내준다고 이해하면 되는 것일까요? /topic으로 2번 가는 것 처럼 느껴져서 약간의 혼동이 있었습니다!
안녕하세요, 강의에서는 메시지 브로커용으로 redis를 사용하셨는데, redis 외에도 rabbitmq나 카프카 같은 것들도 사용되는 것으로 알고있습니다. 그 중에서 특별히 redis를 사용한 이유가 있는지 궁금합니다. 그리고 무중단 배포 시 스프링 내장 브로커를 사용하면 서버 재실행 시 구독 정보가 초기화되기에 메시지 브로커를 도입하려고 하는데 이때는 셋 중에 어떤 것을 사용하면 좋을지 궁금합니다.
안녕하세요. JWT를 생성하는 코드(JwtTokenProvider.java의 createToken)에서는 Claims 객체를 먼저 생성하고 claims.setSubject() 로 설정한 후, 이 claims를 builder에 전달하는 방식을 사용하고 계신데요. Builder에도 setSubject() 메서드가 있는데, Claims 객체에서 먼저 설정하신 이유가 궁금합니다. 혹시 custom claim인 role 을 함께 추가하기 위해서 Claims 객체를 먼저 생성하여 사용하신 건가요? 아니면 다른 이유가 있으신지 궁금합니다.
현재 인터셉터에서는 토큰을 검증만 하고 있는데, "토큰 검증 후에 인증 객체를 SecurityContextHolder에 저장 해야 하지 않나?" 라는 생각이 들었습니다. 이 부분은 강의에서 굳이 필요하지 않아서 만들지 않으신 걸까요? 아니면 " 인증 객체를 SecurityContextHolder에 저장하는 부분 은 이 인터셉터의 의도와는 맞지 않다"라고 볼 수 있을까요? 추가로 인증 객체를 SecurityContextHolder에 저장했을 때 와 accessor.setUser(principal) 를 수행했을 때의 장점과 이를 활용해 추가로 구현해볼 수 있는 기능들에는 어떤 것들이 있을지 궁금합니다.