我有以下代码可使用PG的COPY将表格下载为文件:
public void download(String table, Writer responseWriter) throws SQLException, IOException {
try (Connection conn = dataSource.getConnection()) {
CopyManager copyManager = new CopyManager(conn.unwrap(BaseConnection.class));
// SQL Injection can happen here!
String statement = "COPY " + table + " TO STDOUT WITH NULL ''";
copyManager.copyOut(statement, responseWriter);
}
}
显然,此代码容易受到SQL注入攻击(表参数从Spring REST控制器传递)。当然,我可以手动清理数据,但如果在CopyManager中有一种“PreparedStatement”的方式来执行此操作,那将是更好的选择。如果使用Spring的JdbcTemplate,则获得额外的加分。