Spring boot 如何使用spring boot stomp在ChannelInterceptor中获取端点路径?

Spring boot 如何使用spring boot stomp在ChannelInterceptor中获取端点路径?,spring-boot,stomp,Spring Boot,Stomp,我是stomp use spring boot 2.1.2.RELEASE的新手。我有多个端点,并配置了一个ChannelInterceptor,以获取一些信息 @覆盖 公共无效注册表TompendPoints(StompEndpointRegistry注册表){ registry.addEndpoint(“/endpoint1”) .addInterceptors(新的IpHandshakeInterceptor()) .setAllowedOrigins(原点) .withSockJS();

我是stomp use spring boot 2.1.2.RELEASE的新手。我有多个端点,并配置了一个
ChannelInterceptor
,以获取一些信息

@覆盖
公共无效注册表TompendPoints(StompEndpointRegistry注册表){
registry.addEndpoint(“/endpoint1”)
.addInterceptors(新的IpHandshakeInterceptor())
.setAllowedOrigins(原点)
.withSockJS();
registry.addEndpoint(“/endpoint2”)
.addInterceptors(新的IpHandshakeInterceptor())
.setAllowedOrigins(原点)
.withSockJS();
//其他andpoint
}
@凌驾
公共无效配置ClientInBoundChannel(通道注册){
注册拦截器(myChannelInterceptor());
}
所有端点都使用
myChannelInterceptor
(实际上,我希望端点使用自己的ChannelInterceptor),我希望通过端点路径在
ChannelInterceptor
中执行操作

@覆盖
公共消息呈现(消息消息、消息通道){
if(endpoint.equals(“endpoint1”)){
}else if(endpoint.equals(“endpoint2”)){
}
}
如何在
ChannelInterceptor
中获取
endpoint
信息?

您可以使用:

  • 在IpHandshakeInterceptor类中,将值写入属性映射:

     @Override
     public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
         if (serverHttpRequest instanceof ServletServerHttpRequest) {
             ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) serverHttpRequest;
             HttpSession session = servletRequest.getServletRequest().getSession();
             //add value to session attributes
             map.put("endpoint", servletRequest.getURI().getPath());
         }
         // ... your logic ...
         return true;
     }
    
    @覆盖
    公共布尔值beforeHandshake(ServerHttpRequest ServerHttpRequest,ServerHttpResponse ServerHttpResponse,WebSocketHandler WebSocketHandler,映射)引发异常{
    if(ServletServerHttpRequest的serverHttpRequest实例){
    ServletServerHttpRequest servletRequest=(ServletServerHttpRequest)serverHttpRequest;
    HttpSession session=servletRequest.getServletRequest().getSession();
    //为会话属性添加值
    put(“端点”,servletRequest.getURI().getPath());
    }
    //…你的逻辑。。。
    返回true;
    }
    
  • 在myChannelInterceptor中,从会话属性读取值:

     @Override
     public Message<?> preSend(final Message<?> message, final MessageChannel channel) throws AuthenticationException {
         final StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
         String endpoint=accessor.getSessionAttributes().get("endpoint").toString();
         // ... your logic ...
         return message;
     }
    
    @覆盖
    公共消息呈现(最终消息消息、最终消息通道)引发AuthenticationException{
    最终StompHeaderAccessor访问器=MessageHeaderAccessor.getAccessor(message,StompHeaderAccessor.class);
    String endpoint=accessor.getSessionAttributes().get(“endpoint”).toString();
    //…你的逻辑。。。
    返回消息;
    }
    
  • 您可以使用:

  • 在IpHandshakeInterceptor类中,将值写入属性映射:

     @Override
     public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
         if (serverHttpRequest instanceof ServletServerHttpRequest) {
             ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) serverHttpRequest;
             HttpSession session = servletRequest.getServletRequest().getSession();
             //add value to session attributes
             map.put("endpoint", servletRequest.getURI().getPath());
         }
         // ... your logic ...
         return true;
     }
    
    @覆盖
    公共布尔值beforeHandshake(ServerHttpRequest ServerHttpRequest,ServerHttpResponse ServerHttpResponse,WebSocketHandler WebSocketHandler,映射)引发异常{
    if(ServletServerHttpRequest的serverHttpRequest实例){
    ServletServerHttpRequest servletRequest=(ServletServerHttpRequest)serverHttpRequest;
    HttpSession session=servletRequest.getServletRequest().getSession();
    //为会话属性添加值
    put(“端点”,servletRequest.getURI().getPath());
    }
    //…你的逻辑。。。
    返回true;
    }
    
  • 在myChannelInterceptor中,从会话属性读取值:

     @Override
     public Message<?> preSend(final Message<?> message, final MessageChannel channel) throws AuthenticationException {
         final StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
         String endpoint=accessor.getSessionAttributes().get("endpoint").toString();
         // ... your logic ...
         return message;
     }
    
    @覆盖
    公共消息呈现(最终消息消息、最终消息通道)引发AuthenticationException{
    最终StompHeaderAccessor访问器=MessageHeaderAccessor.getAccessor(message,StompHeaderAccessor.class);
    String endpoint=accessor.getSessionAttributes().get(“endpoint”).toString();
    //…你的逻辑。。。
    返回消息;
    }