我想动态过滤JDBI查询.
参数列表通过REST从UI传递,例如
http://localhost/things?foo=bar&baz=taz
http://localhost/things?foo=buz
Run Code Online (Sandbox Code Playgroud)
哪个(笨拙地)构建(Jersey @Context UriInfo :: getQueryParameters - > StringBuilder)是这样的:
WHERE foo=bar AND baz=taz
Run Code Online (Sandbox Code Playgroud)
并传递给JDBI,如下所示:
@UseStringTemplate3StatementLocator
public interface ThingDAO {
@SqlQuery("SELECT * FROM things <where>)
List<Thing> findThingsWhere(@Define("where") String where);
}
Run Code Online (Sandbox Code Playgroud)
据我所知,当前的实现容易受到SQL注入的攻击.我显然可以清理列名而不是值.1
必须有一个更优雅和SQL注入证明的方法来做到这一点.