Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring@MessageMapping控制器不';I don’我不能通过套接字接收来自angular的消息_Angular_Spring_Websocket_Spring Websocket - Fatal编程技术网

Spring@MessageMapping控制器不';I don’我不能通过套接字接收来自angular的消息

Spring@MessageMapping控制器不';I don’我不能通过套接字接收来自angular的消息,angular,spring,websocket,spring-websocket,Angular,Spring,Websocket,Spring Websocket,它具有jwt身份验证。当我通过套接字发送消息时,我传递了一个带有查询参数的身份验证令牌。根据spring Logger,这个请求经过了正确的身份验证,尽管它无法到达控制器 Web套接字配置代码 @Configuration @EnableWebSocketMessageBroker @CrossOrigin public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override p

它具有jwt身份验证。当我通过套接字发送消息时,我传递了一个带有查询参数的身份验证令牌。根据spring Logger,这个请求经过了正确的身份验证,尽管它无法到达控制器

Web套接字配置代码

@Configuration
@EnableWebSocketMessageBroker
@CrossOrigin
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

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

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry
                .addEndpoint("/ws")
                .setAllowedOrigins("*")
                .withSockJS();
    }

    
    @Override
    public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
        DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
        resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setObjectMapper(new ObjectMapper());
        converter.setContentTypeResolver(resolver);
        messageConverters.add(converter);
        return false;
    }
    
}
import { Injectable, OnDestroy } from "@angular/core";
import * as Stomp from 'stompjs';
import * as Socket from 'socket.io-client';
import { AuthService } from "../auth/auth.service";
import { User } from "../auth/user.model";
import { Subscription } from "rxjs";
import * as SockJS from "sockjs-client";

@Injectable({providedIn:'root'})
export class MessageService implements OnDestroy{

    currentUser:User;
    userSubscription:Subscription;
    constructor(private authService:AuthService) {
        
      }
    
      public stompClient;
      public msg = [];
      initializeWebSocketConnection() {
        this.userSubscription = this.authService.user.subscribe(
            user=>{
                this.currentUser = user;
            }
        );
        const serverUrl = 'http://localhost:8080/ws?param='.concat(this.currentUser.token);
        const ws = new Socket(serverUrl);
        
        this.stompClient = Stomp.over(ws);
        const that = this;
        // tslint:disable-next-line:only-arrow-functions
        this.stompClient.connect({},this.onConnected());
      }

      onConnected(){
        console.log("CONNECTED");
        this.stompClient.subscribe(
            "/user/"+14+"/queue/messages",
            message => {
                console.log("RECEIVED");
                console.log(message);
            }
        )
      }
      
      sendMessage() {
        console.log("MESSAGE SENT");
        const message = {
            senderId: 14,
            recipientId: 14,
            senderName: "Lecturer",
            recipientName: "Kiryl",
            content: "THIS IS A MESSAGE TO EVERY",
            timestamp: new Date(),
        }
        console.log(JSON.stringify(message));
        this.stompClient.send('/app/chat' , {}, JSON.stringify(message));
      }

      ngOnDestroy(): void {
            this.userSubscription.unsubscribe();
        }
}
角度Web套接字服务文件

@Configuration
@EnableWebSocketMessageBroker
@CrossOrigin
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

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

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry
                .addEndpoint("/ws")
                .setAllowedOrigins("*")
                .withSockJS();
    }

    
    @Override
    public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
        DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
        resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setObjectMapper(new ObjectMapper());
        converter.setContentTypeResolver(resolver);
        messageConverters.add(converter);
        return false;
    }
    
}
import { Injectable, OnDestroy } from "@angular/core";
import * as Stomp from 'stompjs';
import * as Socket from 'socket.io-client';
import { AuthService } from "../auth/auth.service";
import { User } from "../auth/user.model";
import { Subscription } from "rxjs";
import * as SockJS from "sockjs-client";

@Injectable({providedIn:'root'})
export class MessageService implements OnDestroy{

    currentUser:User;
    userSubscription:Subscription;
    constructor(private authService:AuthService) {
        
      }
    
      public stompClient;
      public msg = [];
      initializeWebSocketConnection() {
        this.userSubscription = this.authService.user.subscribe(
            user=>{
                this.currentUser = user;
            }
        );
        const serverUrl = 'http://localhost:8080/ws?param='.concat(this.currentUser.token);
        const ws = new Socket(serverUrl);
        
        this.stompClient = Stomp.over(ws);
        const that = this;
        // tslint:disable-next-line:only-arrow-functions
        this.stompClient.connect({},this.onConnected());
      }

      onConnected(){
        console.log("CONNECTED");
        this.stompClient.subscribe(
            "/user/"+14+"/queue/messages",
            message => {
                console.log("RECEIVED");
                console.log(message);
            }
        )
      }
      
      sendMessage() {
        console.log("MESSAGE SENT");
        const message = {
            senderId: 14,
            recipientId: 14,
            senderName: "Lecturer",
            recipientName: "Kiryl",
            content: "THIS IS A MESSAGE TO EVERY",
            timestamp: new Date(),
        }
        console.log(JSON.stringify(message));
        this.stompClient.send('/app/chat' , {}, JSON.stringify(message));
      }

      ngOnDestroy(): void {
            this.userSubscription.unsubscribe();
        }
}
这是我在控制台中得到的

有人知道怎么解决吗