如何在apache camel DSL或camel Processor内部设置其他身份验证属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在apache camel DSL或camel Processor内部设置其他身份验证属性?相关的知识,希望对你有一定的参考价值。

在这里,我试图将Json数据转换为CSV格式,最后将此文件发送到Ofbiz服务器api,但是当我在URL中发送参数时api端点需要一些身份验证内容我得到了下面的输出。

{“_ ERROR_MESSAGE _”:“错误调用事件:org.apache.ofbiz.webapp.event.EventHandlerException:找到的URL参数[configId]通过uri [uploadAndImportFileFromCSVFile]传递给安全(https)请求映射,其中一个事件调用服务[uploadAndImportFile ];出于安全原因,这是不允许的!数据应该通过使其成为请求主体(表单字段)而不是请求URL的一部分来加密。此外,如果您可以创建https://issues.apache.org/jira/browse/OFBIZ-2330的Jira子任务,那将是很好的(如果不存在此错误的子任务,请在之前检查。)如果您不确定如何创建Jira问题,请在https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Contributors+Best+Practices之前查看,请提前感谢您的帮助。“,”sessionId“:”someId .jvm1" , “removePathAlias”:假 “的loggedIn”:真正的 “USERNAME”: “__”, “_ _ LOGIN_PASSED”: “TRUE”, “webSiteId”: “API”}

之后我使用MultipartBuilder发送请求。

exchange.getIn().setHeader("bearer",token);         
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
File file =new File("//home/r2/Desktop/ofBizFile/orderFile.csv");
builder.addPart("configId",new StringBody("CON_ID"));
builder.addPart("fileTypeEnumId",new StringBody("CSV_FILE"));
builder.addPart("_uploadedFile_contentType",new StringBody("text/csv"));
builder.addPart("uploadedFile",new FileBody(file));
exchange.getIn().setBody(builder.build());

我也试过这样的事。

exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
exchange.getIn().setHeader(Exchange.HTTP_QUERY,"USERNAME=abc&PASSWORD=bc69");
exchange.getIn().setBody("configId=CON_ID&fileTypeEnumId=CSV_FILE");

这是我的骆驼路线

//Route 1  
 from("couchdb:http://localhost:5984/order")
        .process(new JsonToCsvProcessor())
         //Storing file into local directory 
        .to("file:/home/r2/Desktop/ofBizFile?fileExist=append&fileName=order-${date:now:yyyyMMdd}.csv");

     .to("direct:jsonToCsv");
//Route 2
   from("direct:jsonToCsv")
    .setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=__"))
    //For get token
    .to("https4://SomeAddress.com/centerAPI/getAuthenticationToken")
    //Get the token and set required parameter for route 3
    .process(new ProcessorGetToken())
    .to("direct:hold");       
//Route 3
   from("direct:hold")
   .setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=__"))
   .to("https4://SomeAddress.com/centerAPI/uploadAndImportFileFromCSVFile?throwExceptionOnFailure=false")
   //How I know the file is submited successfuly ?
   .to("stream:out").end();

那么问题是我如何在路由2处理器GetToken中为下一个路由3发送数据?

答案

我会在这里给黑暗一枪。阅读您的错误消息:

应通过使数据成为请求主体(表单字段)的一部分而不是请求URL来加密数据

你有没有关于这种集成的文档?我认为您需要更多关于此过程的说明以及在发送数据之前加密数据需要什么。

另外,尝试将Exchange.HTTP_METHOD设置为POST到您的路线中,如下所示:

exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
exchange.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
exchange.getIn().setHeader(Exchange.HTTP_QUERY,"USERNAME=abc&PASSWORD=bc69");
exchange.getIn().setBody("configId=CON_ID&fileTypeEnumId=CSV_FILE");

看看this unit test,看看更多通过HTTP发送数据的例子。那里还有许多其他测试。

以上是关于如何在apache camel DSL或camel Processor内部设置其他身份验证属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在apache camel DSL中获得正确的https服务器响应?

Apache Camel REST DSL 405方法不允许

如何在使用Java DSL的camel Header中设置没有扩展名的文件名?

Apache Camel 和 Hystrix 命令名称

Camel Rest DSL 检索 HTTP POST 多部分文件

设置Camel文件使用者的动态延迟