【发布时间】:2017-01-21 01:23:15
【问题描述】:
我正在使用带有 spring-boot 和 angular 的 JHipster 3.5.0 来构建应用程序。 我想使用服务器发送的事件将更新从后端发送到 UI,但我无法让它工作。
这是我的 RestController 的代码:
@RestController
@RequestMapping("/api")
public class SSEResource {
private final List<SseEmitter> sseEmitters = new CopyOnWriteArrayList<>();
@RequestMapping(value = "/sse", method = RequestMethod.GET)
@Timed
public SseEmitter getSSE() throws IOException {
SseEmitter sseEmitter = new SseEmitter();
this.sseEmitters.add(sseEmitter);
sseEmitter.send("Connected");
return sseEmitter;
}
@Scheduled(fixedDelay = 3000L)
public void update() {
this.sseEmitters.forEach(emitter -> {
try {
emitter.send(String.valueOf(System.currentTimeMillis()));
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
我的 Angular 控制器如下所示:
(function () {
'use strict';
angular
.module('myApp')
.controller('SSEController', SSEController);
SSEController.$inject = [];
function SSEController() {
var vm = this;
vm.msg = {};
function handleCallback(msg) {
vm.msg = msg.data;
}
vm.source = new EventSource('api/sse');
vm.source.addEventListener('message', handleCallback, false);
}
})
();
当我尝试使用该代码时,我收到一个
406 不可接受的 HTTP 状态
因为请求头 Accept:"text/event-stream"。如果我手动将该标头更改为 Accept:"/*" 并使用浏览器的调试工具重播该请求,我会得到 p>
401 未经授权的 HTTP 状态
我认为我遗漏了一些非常简单的东西,但我已经检查了我的 SecurityConfiguration 和 authInterceptor 却不明白遗漏了什么。
谁能解释我做错了什么?
【问题讨论】:
标签: angularjs spring-mvc spring-boot jhipster