복붙노트

[SPRING] Spring 4에서 인증되지 않은 사용자에게 답장하는 방법 WebSocket 구성을 통한 STOMP?

SPRING

Spring 4에서 인증되지 않은 사용자에게 답장하는 방법 WebSocket 구성을 통한 STOMP?

Spring 4 WebSocket STOMP 어플리케이션을 실험하고 있습니다. 각 사용자의 세션 ID가 고유 한 상태에서 인증되지 않은 단일 사용자에게 회신하는 방법이 있습니까? 지금은 메시지를 브로드 캐스트하거나 인증 된 사용자에게 직접 보낼 수 있습니다.

@Controller
public class ProductController {

    @MessageMapping("/products/{id}")
    @SendTo("/topic") // This line makes return value to be broadcasted to every connected user.
    public String getProduct(@DestinationVariable int id) {
        return "Product " + id;
    }
}

해결법

  1. ==============================

    1.수신 사용자에게 익명 ID를 지정할 수 있습니다. 두 가지 방법이 있습니다.

    수신 사용자에게 익명 ID를 지정할 수 있습니다. 두 가지 방법이 있습니다.

    하나는 decideUser를 재정의하고 모든 WebSocketSession에 일종의 ID를 할당하는 DefaultHandshakeHandler의 하위 클래스를 구성 할 수 있습니다. 이를 위해서는 2014 년 1 월 23 일 월요일에 출시 될 예정인 4.0.1 버전 (현재 스냅 샷을 사용할 수 있음)이 필요합니다.

    둘째, WebSocket 세션은 핸드 셰이크 HTTP 요청에서 HttpServletRequest.getUserPrincipal에서 반환 된 값으로 돌아갑니다. 당신은 서블릿 필터를 가질 수 있습니다. HttpServletRequest를 감싸고 그 메소드에서 리턴 할 것을 결정하십시오. 또는 AnonymousAuthenticationFilter가있는 Spring Security를 ​​사용하는 경우 createAuthentication 메소드를 재정의하십시오.

  2. ==============================

    2.@SendToUser ( "/ products")는 "/ user / {username} / products"대상에 대한 메시지를 표시해야합니다. 이 메시지는 "/ products-user {sessionId}"로 대상을 변환하고 메시지를 다시 보내는 UserDestinationMessageHandler에 의해 처리됩니다.

    @SendToUser ( "/ products")는 "/ user / {username} / products"대상에 대한 메시지를 표시해야합니다. 이 메시지는 "/ products-user {sessionId}"로 대상을 변환하고 메시지를 다시 보내는 UserDestinationMessageHandler에 의해 처리됩니다.

    그래서 "/ user / products-user0"이 무엇인지는 잘 모르겠습니다. 두 가지면에서 놀랍습니다. 먼저 "/ user"로 시작하는 경우 변환 전의 대상이며 사용자 이름 (예 : "/ user / {username} / products")이 따라 와야합니다.

    "-user0"으로 끝나는 사실은 변환 후 대상처럼 보이지만 "/ user"로 시작하면 안됩니다. 어쨌든 0, 1은 WebSocket 세션 ID입니다. 어떤 서버입니까?

  3. from https://stackoverflow.com/questions/21312222/how-to-reply-to-unauthenticated-user-in-spring-4-stomp-over-websocket-configurat by cc-by-sa and MIT license