Java 使用rabbitmq配置Spring websocket时出现拒绝非环回访问错误

Java 使用rabbitmq配置Spring websocket时出现拒绝非环回访问错误,java,spring-websocket,Java,Spring Websocket,我正在构建一个SpringWebSocket应用程序,该应用程序使用RabbitMQ作为消息代理 下面提供了配置文件 @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistr

我正在构建一个SpringWebSocket应用程序,该应用程序使用RabbitMQ作为消息代理

下面提供了配置文件

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableStompBrokerRelay("/topic")
            .setRelayHost("192.168.1.8")
            .setRelayPort(61613)
            .setClientLogin("user")
            .setClientPasscode("user");

    //config.enableSimpleBroker("/topic");
    config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/gs-guide-websocket").setAllowedOrigins("*").withSockJS();   
}
}
但是当我运行应用程序时,它会给我以下错误

Received ERROR {message=[Bad CONNECT], content-type=[text/plain], version=[1.0,1.1,1.2], 
content-length=[26]} session=_system_ text/plain payload=non-loopback access denied
我已尝试在rabbitmq中授予所需的权限

sudo rabbitmqctl set_permissions -p / user ".*" ".*" ".*"

但问题还是出现了。但是如果我用“localhost”或“127.0.0.1”替换“setRelayHost(..)”中的ipaddress,应用程序就可以正常工作

RabbitMQ允许您将用户配置为只能通过环回接口(localhost)进行连接,这也是默认用户的情况。检查您的用户是否在配置文件中的
环回\u users
属性下配置,或者这是否是默认用户


请同时检查

我遇到了这个问题,经过两个小时的搜索,我可以解决它。 首先,我应该从
StompBrokerRelayMessageHandler
这里带来一些代码:

@Override
protected void startInternal() {
    if (this.tcpClient == null) {
        StompDecoder decoder = new StompDecoder();
        decoder.setHeaderInitializer(getHeaderInitializer());
        Reactor2StompCodec codec = new Reactor2StompCodec(new StompEncoder(), decoder);
        this.tcpClient = new StompTcpClientFactory().create(this.relayHost, this.relayPort, codec);
    }

    if (logger.isInfoEnabled()) {
        logger.info("Connecting \"system\" session to " + this.relayHost + ":" + this.relayPort);
    }

    StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.CONNECT);
    accessor.setAcceptVersion("1.1,1.2");
    accessor.setLogin(this.systemLogin);
    accessor.setPasscode(this.systemPasscode);
    accessor.setHeartbeat(this.systemHeartbeatSendInterval, this.systemHeartbeatReceiveInterval);
    accessor.setHost(getVirtualHost());
    accessor.setSessionId(SYSTEM_SESSION_ID);
    if (logger.isDebugEnabled()) {
        logger.debug("Forwarding " + accessor.getShortLogMessage(EMPTY_PAYLOAD));
    }

    SystemStompConnectionHandler handler = new SystemStompConnectionHandler(accessor);
    this.connectionHandlers.put(handler.getSessionId(), handler);

    this.stats.incrementConnectCount();
    this.tcpClient.connect(handler, new FixedIntervalReconnectStrategy(5000));
}
因此,正如您在这些行中看到的:

accessor.setLogin(this.systemLogin);
accessor.setPasscode(this.systemPasscode);
它使用
systemLogin
systemPasscode
登录rabbitmq服务器。 这些参数的默认值为“guest”,在类的顶部定义:

private String systemLogin = "guest";

private String systemPasscode = "guest";
使用“来宾”用户,您可以在localhost中登录系统

因此,您应该在配置中设置这些参数:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableStompBrokerRelay("/topic")
            .setRelayHost("192.168.1.8")
            .setRelayPort(61613)
            .setClientLogin("user")
            .setClientPasscode("user")
            .setSystemLogin("user")
            .setSystemPasscode("user");

    //config.enableSimpleBroker("/topic");
    config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/gs-guide-websocket").setAllowedOrigins("*").withSockJS();   
}
}
在此配置之后,如果运行此命令:

sudo rabbitmqctl set_permissions -p / user ".*" ".*" ".*"

一切都很顺利。

这个问题解决了吗?我也有同样的问题