【问题标题】:How to secure values being sent via HTTP request?如何保护通过 HTTP 请求发送的值?
【发布时间】:2019-07-25 06:58:56
【问题描述】:

我正在开发一个实现 REST API 的微服务。就是把某些文件从一个共享的网络位置上传到一个FTP服务器上。

这是一个示例代码:

      @RequestMapping(method = RequestMethod.GET, value = "/ftpProcess", produces = "text/plain")
public String ftpFiles() throws UnknownHostException {
    String status = "" ;

    JSch jsch = new JSch();
    Session session = null;
    try {
        session = jsch.getSession("ftpUserName", "ftpHost", 10022);
        session.setConfig("StrictHostKeyChecking", "no");
        session.setPassword("ftpPassword");
        session.connect();

        Channel channel = session.openChannel("sftp");
        channel.connect();
        ChannelSftp sftpChannel = (ChannelSftp) channel;

 //Just an example - I wull upload 4 dummy files       
 for(int i=1; i<4; i++) {
            sftpChannel.put(/*Here I navigate to a file, and repeat it 3 times for 3 different files*/);
        }                     
        sftpChannel.exit();
        session.disconnect();


        status = "SUCCSSES" ;
    } 

在一个真实的应用程序中,我可能有不同的 ftpServer/host、用户和密码,所以它们必须作为参数进来。 我知道我可以使用@PathVariable 或@parameters 来做到这一点——通过HTTP GET 来做到这一点,但这样每个人都会看到传递了什么。

我怎样才能传递输入的信息,使其保密?

【问题讨论】:

    标签: spring model-view-controller microservices


    【解决方案1】:

    通常,当您处理由 HTTP 请求触发的微服务时,POST 请求是确保发送信息安全的方法。

    您可以阅读here,在 POST 请求中,数据是在请求正文中发送的,而不是作为参数发送的。在 POST 正文中,数据应格式化为 JSON(键:值对),其结构应与方法作为参数接收的对象匹配。例如:

    @RequestMapping(method = RequestMethod.POST, value = "/ftpProcess", produces = "text/plain")
        public String ftpFiles(@RequestBody ExampleObject jsonObject){
            return null;
        }
    

    例如:

    JSON 主体上的每个键值都必须匹配引用的jsonObject 的属性,以便在反序列化时自动设置相应的值。

    您始终可以使用 Postman 之类的工具来测试 POST(或任何公平的)请求,方法是编辑其正文并将其发送到您服务器上的相应端点。

    例如,如果您有这样的对象:

    public class ExampleObject {
    
        private String valueA;
    
        private String valueB;
    }
    

    您可以像这样向端点发送 POST。当请求到达您服务器上的端点时,您的 ExampleObject 将按照 JSON 正文中指定的方式设置其属性。

    【讨论】:

    • 谢谢。这似乎是我正在寻找的东西。如果我从应用程序访问微服务,我将如何调用它来“发送”那个 json 对象?
    • 当我回到家时,我将截取带有 JSON 正文的 POST 请求,以使示例更清楚。现在,请考虑下载 Postman... 是 HTTP 请求测试的首选软件。
    • 你能解决你的实现吗?它完全解决了你的问题吗?考虑将其标记为正确答案,以便将来有更多人参考。
    • 我可以使用@Gabrielle Pimenta 的这个例子,它适用于我的情况。
    【解决方案2】:

    您可以使用 RequestHeaders。

    public String ftpFiles(@RequestHeader("accept-language") String header1) throws....{
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多