2014-12-03 2 views
2

칸트는이 질문에 대한 대답은 충분하지 설명서에 대한 SimpleBrokerMessageHandler을 찾을 것으로 보인다. 통신 관계 - STOMP 봄

나는이 예제를 따라 갔다 : https://gerrydevstory.com/2014/03/04/stock-ticker-demo-webapp-using-spring-4-websocket/

과는 클라이언트주제에 메시지를 전송하면 해당 주제에 가입 된 다른 모든 클라이언트들이 그 메시지가 나타날 것으로 보인다. 주제의 기본 관계가 many-to-many 인 것처럼

나는 관계가 많은 클라이언트와 서버에 다수의 클라이언트가 아닌 다수의 클라이언트에 하나 개의 서버를 의미 one-to-many 될 것이라고 기대. 클라이언트가 서버에 가장하는, 다른 사람에 가짜 주가를 보낼 수 위의 링크에서 다음 예제 -

이 문제는 보안/인증 문제를 제시한다.

이것이 행동이라면 스프링 웹 소켓과 스톰프의 설정에서 어딘가에 덮어 쓰기되거나 변경 될 수 있지만 나는 여기 어디서나 충분한 정보를 찾을 수 없다는 것도 기대할 것입니다.

그래서 질문은 다음과 같습니다

  1. 기본 거동 SimpleBrokerMessageHandler 정말 many-to-many인가?
  2. topic의 의미를 정확히 이해하지 못하고 있습니까?
  3. 이 동작을 어떻게 변경하거나 제어 할 수 있습니까? 그렇지 않으면
  4. , ActiveMQ를 또는 RabbitMQ 또는 제 3 자 브로커의 (a one-to-many 방식을 구현하는) 내 요구에 어떤 도움이 될 것인가? 그리고 어떻게? /topic 접두어

답변

2

목적지는 일반적으로 브로커 목적지, 그리고 제대로 말했듯이, 사람은 목적지로 메시지를 보낼 수 있으며, 사람들은 (메시지가 실제로 브로커로 전달됩니다) .This이 일어날 모든 가입자를 수신합니다 단순 브로커와 브로커 중계 (RabbitMQ 또는 ActiveMQ와 같은 본격적인 STOMP 브로커 사용).

그러나 현재 M2에있는 Spring Security 4에 웹 소켓 보안 지원이 추가되어 있으므로 메시지 보내기 또는 대상 구독을 제한 할 수 있습니다 (JIRA SEC-2713 참조). 그게 충분하지 않은 경우 자신의 ChannelInterceptor을 구현하고 clientInboundChannel에 추가하여 메시지를 처리하고 논리에 따라 삭제할 수 있습니다.

+0

대단히 감사합니다! 나는 내가 뭔가 잘못하고 있다고 생각하기 시작했다. 이것이 프로덕션 제품에서 사용되기 때문에 아직 출시되지 않은 스프링 보안 버전을 사용하고 싶지는 않습니다. 솔루션에 대한 귀하의 다른 제안은 매우 흥미로운 것 같습니다! 일대 다 관계 만 허용하려면 ChannelIntercetor 코드에서 확인하고 수행해야하는 것에 대한 정보를 제공 할 수 있습니까? – SatA

+1

'ChannelInterceptorAdapter'에서 확장하고 논리로'preSend' 메소드를 구현하면 메시지를 버리기 위해 null을 리턴합니다. 또 다른 옵션은 앱 대상 (/ app/..)을 만들고, 사용자가 메시지를 보내고, 컨트롤러에서 메시지를 처리 ​​한 다음 결과를 브로커 대상에 전송하여 브로드 캐스트합니다 ('@ SendTo' 참조). –

+0

OK , 감사. 다른 옵션에 대해서는 신뢰성 문제가 해결되지 않습니다. 위의 제 의견에 강조 했어야합니다. 어쨌든 도와 주셔서 감사합니다, 나는 그것을 시도합니다. – SatA