如何使用 Apache Camel 进行授权?

发布于 2024-11-19 23:40:31 字数 831 浏览 3 评论 0 原文

我必须发出 POST 请求

curl -X POST --data-binary @auth.json http://somehost.com/auth
{
    "response": {
        "status": "OK",
        "token": "622cee5f8c99c81e87614e9efc63eddb"
    }
}

,这将返回带有令牌的 JSON 响应。 auth.json 是一个包含登录名和密码的 JSON 文件。然后我有两个选择:将令牌作为“Authorization:TOKEN”放入将来请求的标头中,或者将其放入 cookie 中并发出其他请求。 我怎样才能用 Apache Camel 做到这一点?如何接收 HTTP 响应?我把令牌放在哪里? 现在我有:

public static void main(String args[]) throws Exception {
    CamelContext context = new DefaultCamelContext();
    context.addRoutes(new RouteBuilder() {
        public void configure() {
            from("file:data/inbox?noop=true")
            .to("http://somehost.com/auth");
        }
    });
    context.start();
    Thread.sleep(10000);
    context.stop(); 

} 我在 ./data/inbox 中有 auth.json 文件

I have to make a POST request

curl -X POST --data-binary @auth.json http://somehost.com/auth
{
    "response": {
        "status": "OK",
        "token": "622cee5f8c99c81e87614e9efc63eddb"
    }
}

, and this will return a JSON response with the token. auth.json is a JSON file with login and password. I then have two options: put the token in the header in future requests as "Authorization: TOKEN", or put it in a cookie and make other requests.
How can I do it with Apache Camel? How can I receive HTTP response? Where do I put the token?
Now I have:

public static void main(String args[]) throws Exception {
    CamelContext context = new DefaultCamelContext();
    context.addRoutes(new RouteBuilder() {
        public void configure() {
            from("file:data/inbox?noop=true")
            .to("http://somehost.com/auth");
        }
    });
    context.start();
    Thread.sleep(10000);
    context.stop(); 

}
and I have the auth.json file in ./data/inbox

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

红尘作伴 2024-11-26 23:40:31

由于您在 Apache Camel 邮件列表上发布了相同的问题,我提供了 答案在那里。

总结一下:只需在发送 http 请求之前在路由中调用 setHeader("Authorization",constant("622cee5f8c99c81e87614e9efc63eddb")) 即可。 Camel 会自动将此标头转换为特定于传输的(在本例中为 HTTP)标头。当然,您不需要在路由中提供常量令牌,您可以使用 Camel 表达式 或处理器。

您的完整路线将类似于:

context.addRoutes(new RouteBuilder() { 
    public void configure() { 
            from("file:data/out?fileName=filename.json&noop=true") 
            .setHeader("Authorization", constant("mytoken")) 
            .to("http://somehost.com/auth"); 
 } 

Since you posted the same question on the Apache Camel mailing list I've provided an answer there.

To summarize: Just call setHeader("Authorization", constant("622cee5f8c99c81e87614e9efc63eddb")) in your route before sending the http request. Camel will automatically translate this header to a transport specific (in this case HTTP) header. Of course you don't need to provide a constant token in your route, you can dynamically calculate or lookup the token by using a Camel expression or processor.

Your complete route will look something like:

context.addRoutes(new RouteBuilder() { 
    public void configure() { 
            from("file:data/out?fileName=filename.json&noop=true") 
            .setHeader("Authorization", constant("mytoken")) 
            .to("http://somehost.com/auth"); 
 } 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文