Я пытаюсь создать систему уведомлений, используя сокет.
Мой код:
WebSocketConfiguration.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends
AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/handler")
.setAllowedOrigins("http://city.localhost")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry brokerRegistry) {
brokerRegistry.setApplicationDestinationPrefixes("/app");
brokerRegistry.enableSimpleBroker("/topic", "/queue");
}
}
NotificationController.java
@RestController
@RequestMapping("/api")
public class NotificationController {
@Autowired
private SimpMessagingTemplate template;
@Autowired
private NotificationService notificationService;
@Autowired
private UserRepository userRepository;
@RequestMapping(value = "/notification", method = RequestMethod.GET)
public List<Notification> sendNotification() {
List<Notification> notifications = notificationService.findAll();
//Here I'm trying to add a header, but it does not work
Map<String, Object> headers = new HashMap<>();
headers.put("Access-Control-Allow-Origin", "http://city.localhost");
template.convertAndSend("/topic/all", notifications, headers);
return notifications;
}
}
tification.js
class Notification extends React.Component {
constructor(props){
super(props);
this.state = {
ignore: true,
title: ''
};
}
render() {
const wsSourceUrl = "http://localhost/handler";
return (
<div>
<SockJsClient url={ wsSourceUrl } topics={["/topic/all"]}
onMessage={ this.onMessageReceive }
onConnect={ () => { console.log("connected") } }
onDisconnect={ () => { console.log("connected") } }
debug={ false }/>
</div>
)
}
}
Теперь у меня проблема:
Как я понял, проблема в том, что в ответе Access-Control-Allow-Origin стоит "*", и мне нужно http://city.localhost/, Я не смог бы поставить такойзаголовок в ответе.Я могу ошибаться и может быть проблема не в этом, я буду рад любой помощи