Spring boot 如何使用spring boot stomp在ChannelInterceptor中获取端点路径?
我是stomp use spring boot 2.1.2.RELEASE的新手。我有多个端点,并配置了一个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();
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
信息?您可以使用:
@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;
}
@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();
//…你的逻辑。。。
返回消息;
}
@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;
}
@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();
//…你的逻辑。。。
返回消息;
}