我想在实现WebSocketConfig
的{{1}}中使用我的tokenRepository
在我的控制器中,我可以通过WebSocketMessageBrokerConfigurer
websocketConfig`无法获得tokenRepository
我在用户连接网络套接字时覆盖@Autowired, but
中的configureClientInboundChannel
来获取数据
在WebSocketConfig
WebSocketConfig
在@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
logger.debug(">>>[CONFIG CLIENT INBOUND CHANNEL]");
registration.interceptors(new SelfChannelInterceptor());
}
SelfChannelInterceptor
保存在数据库中以供验证的令牌数据。
但是我怎么能让@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
if (StompCommand.CONNECT.equals(accessor.getCommand())) {
String token = accessor.getNativeHeader("token").get(0);
String id = accessor.getNativeHeader("id").get(0);
if (!validConnection(token, id)){
throw new IllegalArgumentException("No permission to this connection");
}
}
return message;
}
得到WebSocketConfig
tokenRepository
中检查数据库的示例
tokenController
答案 0 :(得分:0)
大家好,我找到了解决此问题的方法。
我使用CompletableFuture让SelfChannelInterceptor
获取我在@Autowired
中的WebSocketConfig
在WebSocketConfig
private CompletableFuture<ServiceImpFactory> completableFutureService = new CompletableFuture<>();
@PostConstruct
public void postConstruct() {
completableFutureService.complete(this.serviceImpFactory);
}
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
logger.debug(">>>[CONFIG CLIENT INBOUND CHANNEL]");
registration.interceptors(new SelfChannelInterceptor(completableFutureService));
}
在SelfChannelInterceptor
中,我可以使用CompletableFuture.get()
来获取想要传递给的内容
SelfChannelInterceptor
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
ServiceFactory serviceFactory = serviceImpFactoryCompletableFuture.get();
return message;
}
我认为websocketConfig可能会添加一些aspect
来调用此类中的方法。
因此,方法configureClientInboundChannel
将在第一次运行。但是如何在interface
上添加AOP?因为我实现了WebSocketMessageBrokerConfigurer
如果有任何方法可以删除aspect
或以后再做,我将继续搜索。