2017-01-24 7 views
0

spring stomp websocket 컨트롤러 내의 호스트 정보에 어떻게 액세스합니까?stomp/spring 컨트롤러의 http 컨텍스트에서 uri 정보 얻기

@Controller 
public class EventSessionController 
{ 
    @Autowired 
    ApplicationContext applicationContext; 

    @MessageMapping("/topic/sessionmessages}") 
    public SocketEvent messageHandler((StompHeaderAccessor accessor, SimpMessageHeaderAccessor headerAccessor, MySocketEvent eventMsg) 
    {    
     ....// Need to access request uri/host 

     // I could access it from headers, but its empty   
     System.out.println(accessor.getHost()); 

    } 
} 

나는 그것을 MessageHeaderAccessor 주입을 시도 할 수 있지만, 어떻게 HTTP 요청 컨텍스트에 대한 액세스 권한을 얻을 수 있습니까?

답변

0

정확하게 질문이 올 경우 요청 URI에 액세스하여 일부 매개 변수를 가져오고 싶을 수 있습니다.

이를 위해, 당신은 예를 들어 아래와 같은 HttpSessionIdHandshakeInterceptor을 사용할 수 있습니다,이 제안에 대한

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    protected final Logger log = LoggerFactory.getLogger(WebSocketConfig.class); 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/topic"); 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/gs-guide-websocket").withSockJS().setInterceptors(httpSessionIdHandshakeInterceptor()); 
    } 

    public class HttpSessionIdHandshakeInterceptor implements HandshakeInterceptor { 

     @Override 
     public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, 
       WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { 
      log.debug("beforeHandshake"); 
      if (request instanceof ServletServerHttpRequest) { 

       ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; 

       HttpSession session = servletRequest.getServletRequest().getSession(false); 
       // **** This is the request URI ********** 
       URI uri = servletRequest.getURI(); 

      } 
      return true; 
     } 

     public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, 
       Exception ex) { 
      log.debug("afterHandshake"); 
     } 

    } 

    @Bean 
    public HttpSessionIdHandshakeInterceptor httpSessionIdHandshakeInterceptor() { 
     return new HttpSessionIdHandshakeInterceptor(); 
    } 

} 
+0

덕분에, 당신은 어떻게에 messageHandler 상류이 정보를 전송 제안? –

+0

좋아, 나는 그 부분을 알아 냈어, 나는 StompHeaderAccessor 접근에서 sessionAttributes에 액세스 할 수 있습니다. –