如何在Vert.x REST服务中转发jwt令牌
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Vert.x REST服务中转发jwt令牌相关的知识,希望对你有一定的参考价值。
我有一个Vert.x REST服务,用jwt令牌接收请求,我想调用另一个REST服务传递收到的令牌。在路由器处理程序和WebClient调用之间,我有一个业务逻辑层。我的问题是,是否有一种方法为webClient提供令牌,而不是通过我的业务逻辑层显式传递它?换句话说,有可能以某种方式检索我的RoutingContext和令牌,例如, vertxContext还是其他组件?
示例代码演示了我想要实现的目标:
垂直卡斯
public class RestApiVerticle extends AbstractVerticle {
businessLogicService service;
@Override
public void start() throws Exception {
initService();
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
JWTAuth authProvider = JWTAuth.create(vertx, getAuthConfig());
router.route("/*").handler(JWTAuthHandler.create(authProvider));
router.route("/somePath").handler(this::handleRequest);
server.requestHandler(router::accept).listen(config().getInteger("port"));
}
private void handleRequest(RoutingContext context){
service.doSomeBusinessLogic(); //I could pass context here, but I thing this is not a proper way to do it, as business logic should not know about RequestContext
}
private void initService(){
ExternalAPICaller caller = new ExternalAPICaller(WebClient.create(vertx));
service = new BusinessLogicService(caller);
}
private JsonObject getAuthConfig() {
return new JsonObject();
}
}
BusinessLogicService:
public class BusinessLogicService {
ExternalAPICaller caller;
public BusinessLogicService(ExternalAPICaller caller){
this.caller = caller;
}
public void doSomeBusinessLogic(){
caller.doSth();
}
}
ExternalAPICaller:
public class ExternalAPICaller {WebClient客户端;
public ExternalAPICaller(WebClient client){
this.client = client;
}
public void doSth(){
String TOKEN = null; // I would like to retrive here my token from some vertx component
client.post("externalAPIpath")
.putHeader("Authorization", "Bearer" + TOKEN)
.send(ctx -> {
//(..)
});
}
}
答案
我的实现是在javascript(Node.js / Express)中,但我使用cookie将JWT发送到客户端。
res.cookie("auth", token);
return res.redirect(`http://localhost:3000/socialauthredirect`);
另一答案
当您调用do business逻辑方法时,您可以传递请求authorization
标头值,因为它包含您未触及的jwt标记。然后在您的Web客户端上添加一个带有该值的标头,当然名为authorization
,您的令牌将转发到下一个服务。
以上是关于如何在Vert.x REST服务中转发jwt令牌的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot JWT - 如何实现刷新令牌和注销 REST-API
如何让 django-rest-framework-jwt 在注册时返回令牌?