Spring@MessageMapping控制器不';I don’我不能通过套接字接收来自angular的消息
它具有jwt身份验证。当我通过套接字发送消息时,我传递了一个带有查询参数的身份验证令牌。根据spring Logger,这个请求经过了正确的身份验证,尽管它无法到达控制器 Web套接字配置代码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
@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();
}
}
这是我在控制台中得到的
有人知道怎么解决吗