- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Vue
中创建一个站点并在 Spring
上创建后端。我想使用 rsocket
来传输数据,但是只要我在 spring
中添加 rsocket seurity
,我就会得到:
'metadata is malformed'
想看看使用 jwt/simpleauth
的工作示例
最佳答案
我用 Simple Auth 解决了这个问题,现在我想将这个授权与 spring websecurity 同步。那些。以便 rsocket 中的路由通过网络安全检查授权。我知道这可以通过 jwt token 实现,即通过 rest 向客户端发送 jwt token ,但我如何在代码中执行此操作? JS 客户端(浏览器)和 Spring,如何生成 userdetails token ?为了以防万一,我将留下一个简单验证实现的示例:
// METADATA BUILDER
import {encodeRoute, encodeBearerAuthMetadata, encodeSimpleAuthMetadata, encodeAndAddCustomMetadata, encodeAndAddWellKnownMetadata, MESSAGE_RSOCKET_ROUTING, MESSAGE_RSOCKET_AUTHENTICATION} from "rsocket-core";
export default class Metadata {
constructor(json) {
this.route = json['route'];
this.auth = json['auth'];
}
toMetadata() {
let metadata = Buffer.alloc(0);
if (this.auth) {
if (this.auth["type"] === 'bearer') {
metadata = encodeAndAddCustomMetadata(
metadata,
MESSAGE_RSOCKET_AUTHENTICATION.string,
encodeBearerAuthMetadata(this.auth["token"]),
);
}
if (this.auth["type"] === 'simple') {
metadata = encodeAndAddCustomMetadata(
metadata,
MESSAGE_RSOCKET_AUTHENTICATION.string,
encodeSimpleAuthMetadata(this.auth["username"], this.auth["password"]),
);
}
}
if (this.route) {
metadata = encodeAndAddWellKnownMetadata(
metadata,
MESSAGE_RSOCKET_ROUTING,
encodeRoute(this.route)
);
}
return metadata;
}
}
// RSOCKET CLIENT CLASS
import RSocketWebSocketClient from "rsocket-websocket-client";
import {BufferEncoders, MESSAGE_RSOCKET_COMPOSITE_METADATA, RSocketClient,toBuffer} from "rsocket-core";
import Metadata from "./metadata";
export default class SpringClient {
constructor(wsUrl, keepAlive = 60000, lifetime = 180000, dataMimeType = "application/json") {
this.client = new RSocketClient({
"setup": {
"keepAlive": keepAlive,
"lifetime": lifetime,
"dataMimeType": dataMimeType,
"metadataMimeType": MESSAGE_RSOCKET_COMPOSITE_METADATA.string
},
"transport": new RSocketWebSocketClient({
"url": wsUrl
}, BufferEncoders)
});
}
bearerAuth(token) {
this.auth = {type: "bearer", token: token}
}
simpleAuth(username, password) {
this.auth = {type: "simple", username: username, password: password}
}
logout() {
this.auth = null;
}
connect(
completeCallback = (socket) => {
}, errorCallback = (error) => {
}, subscribeCallback = (cancel) => {
}
) {
this.client.connect().subscribe({
onComplete: socket => {
this.socket = socket;
completeCallback(socket);
},
onError: error => {
errorCallback(error);
},
onSubscribe: cancel => {
subscribeCallback(cancel);
}
});
}
requestResponse(data, route,
completeCallback = (data) => {
},
errorCallback = (error) => {
},
subscribeCallback = (cancel) => {
}
) {
if (this.socket) {
const metadata = new Metadata({
route: route,
auth: this.auth
}).toMetadata();
data = toBuffer(data);
this.socket.requestResponse({
data,
metadata
}).subscribe({
onComplete: data => {
completeCallback(data);
},
onError: error => {
errorCallback(error);
},
onSubscribe: cancel => {
subscribeCallback(cancel);
}
});
}
}
}
// EXAMPLE, HOW TO USE
import SpringClient from "./springclient";
this.client = new SpringClient("ws://localhost:7000/", 5000, 15000, "text/plain");
this.client.connect(
(socket) => {
console.log("got connection complete");
this.socket = socket;
},
(error) => {
console.log("got connection error");
console.error(error);
},
(cancel) => {
console.log("got connection subscribe");
/* call cancel() to abort */
}
)
this.client.simpleAuth("LOGIN", "PASSWORD");
this.client.requestResponse("MESSAGE", "ROUTE",
(data) => {
console.log("got response with requestResponse");
console.log(data.data);
},
(error) => {
console.log("got error with requestResponse");
console.error(error);
},
(cancel) => {
console.log(message);
/* call cancel() to stop onComplete/onError */
}
);
关于javascript - Spring RSocket Security + RSocket-WebSocket-Client(浏览器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66879773/
如何设置路由元数据(在服务器使用 Spring Boot Rsocket 时仅使用 RSocket-Java 的有效负载。Flux s = connection.flatMapMany(request
好的,我是 RSocket 的新手。我正在尝试创建一个简单的 RSocket 客户端和简单的 RSocket 服务器。从我所做的研究来看,RSocket 支持恢复: 它特别有用,因为当发送包含有关最后
我对 RSocket 完全陌生。 我阅读了常见问题解答和动机页面(并浏览了协议(protocol)页面)并了解 RSocket 可以在 TCP、WebSocket 和 Aeron 之上使用。但是我不明
我正在尝试在 Vue 中创建一个站点并在 Spring 上创建后端。我想使用 rsocket 来传输数据,但是只要我在 spring 中添加 rsocket seurity,我就会得到: 'metad
我在通过 TCP 连接到 Spring Boot RSocket 应用程序时遇到问题。使用 RSocketRequester 时的客户端工作正常,但是当我尝试使用 RSocketFactory 客户端
Is it somehow possible to use Spring's RSocket integration in a "traditional" servlet-b
目录 0. RSocket 简介 1. 服务端 1.1 SETUP阶段 - 处理客户端发起的连接请求
Source Code: https://github.com/joexu01/rsocket-demo 0. 四种通信模式 让我们来简单复习一下 RSocket 的四种通信模式:
1. 编写客户端接收请求的逻辑 我们可以在初始化 Rsocket 实例的时候指定客户端可以被调用的方法,使用 acceptor() 指定可被调用的方法和方法使用的通信模型类型:
rsocket 似乎是个很酷的主意。我有这个问题,但找不到更好的答案。 让我们考虑这个初始设置。客户端依次向server-1发送多个请求。 client --> server-1 server-1 正
我已经使用rsocket编写了简单的客户端和服务器程序-使用以下版本的librdmacm-dev和librdmacm1软件包(使用Ubuntu 14.04)的RDMA套接字API: librdmacm
在我的项目中,我希望有多个客户端连接到一个服务。我正在使用 java Rsocket 实现。 服务应该为每个客户端维护一个状态。现在在这一点上,我可以通过一些标识符来管理客户端。这个选项我已经实现了。
这是我的代码,它仅适用于我所在的选项卡。我收到了回复,似乎一切正常,但我仍然不完全了解该技术的操作,这就是我去找你的原因。 它以“responseHanlder”结尾 connect() {
有人可以告诉我或使用 提供现成的 CRUD 示例吗? WebFlux、RScoket 和 Spring(或 SpringBoot) ? 我研究了 RSocket 文档, WebFlux ,也写了我的简
我必须再次回到 Symbian 中的套接字。建立与远程服务器的连接的代码如下所示: TInetAddr serverAddr; TUint iPort=111; TRequestStatus iS
我似乎无法在 RSocket 上找到任何资源/教程,除了阅读他们在 GitHub 上的代码,我不明白。 我的服务器上有一个文件路径:String serverFilePath; 我希望能够从我的客户端
假设我有这个用于聊天消息的简单 Websocket 处理程序: @Override public Mono handle(WebSocketSession webSocketSession) {
我正在尝试为我的服务器编写一个客户端(在 Kotlin 和使用 Spring Reactive Web 中)。我在尝试使用 RSocket 时遇到了这个问题。如何使用 RSocket 获得 Flux?
我正在使用 Spring 对 RSocket 的支持,特别是请求流模型。 IE。: @MessageMapping("stream") Flux stream(final SubscriptionMe
解决摘要: 在目前的大多数 RSocket 示例中,即使在 SpringBoot 相关教程中,服务器端接受器也被简单地构造为一个新对象(如下面的 new MqttMessageService() )。
我是一名优秀的程序员,十分优秀!