在 Spark Java 中使用 pac4j 安全过滤器时,如何获取 post 请求的参数?
How do I get the parameters of a post request when using a pac4j security filter in Spark Java?
在我的 Spark 应用程序中,我有一个简单的表单,我使用 POST 请求将其输入发送到服务器。通过评估其主体并提取所需参数来处理请求:
post("/upload",(request, response) -> {
String body = request.body();
MultiMap<String> parameters = decodeParams(body);
// post-process parameters
// ...
return "success";
});
只要我没有定义 pac4j 安全过滤器,确保我的应用程序的用户已登录,一切都会按预期进行。这就是我设置过滤器的方式:
// ...
MyConfig config = new MyConfig(salt, templateEngine);
CallbackRoute callback = new CallbackRoute(config, null, true);
get("/callback", callback);
post("/callback", callback);
before("/upload", new SecurityFilter(config, "FormClient"));
此过滤的效果是正文(在我的第一个代码片段中)为空。
我发现 this old post in the sparkjava Google group 描述了同样的问题,包括对根本原因的初步分析。很遗憾,已经两年多了,还没有收到回复。
编辑: 我正在使用 Spark 2.5.5 和 spark-pac4j 2.0.0-RC2。
有没有办法在过滤后检索所需的参数?我可能需要调整我的过滤器吗?或者这是 Spark 框架中的错误?
非常感谢任何支持。
我发现了我的错误。我应该使用请求的 queryParams()
方法来获取所需的值,而不是在 decodeParams()
方法中手动解码正文中的参数。即使应用了过滤器,以下代码也适用于我:
post("/upload",(request, response) -> {
final String param1 = request.queryParams("key1");
final String param2 = request.queryParams("key2");
// post-process parameters
// ...
return "success";
});
在我的 Spark 应用程序中,我有一个简单的表单,我使用 POST 请求将其输入发送到服务器。通过评估其主体并提取所需参数来处理请求:
post("/upload",(request, response) -> {
String body = request.body();
MultiMap<String> parameters = decodeParams(body);
// post-process parameters
// ...
return "success";
});
只要我没有定义 pac4j 安全过滤器,确保我的应用程序的用户已登录,一切都会按预期进行。这就是我设置过滤器的方式:
// ...
MyConfig config = new MyConfig(salt, templateEngine);
CallbackRoute callback = new CallbackRoute(config, null, true);
get("/callback", callback);
post("/callback", callback);
before("/upload", new SecurityFilter(config, "FormClient"));
此过滤的效果是正文(在我的第一个代码片段中)为空。
我发现 this old post in the sparkjava Google group 描述了同样的问题,包括对根本原因的初步分析。很遗憾,已经两年多了,还没有收到回复。
编辑: 我正在使用 Spark 2.5.5 和 spark-pac4j 2.0.0-RC2。
有没有办法在过滤后检索所需的参数?我可能需要调整我的过滤器吗?或者这是 Spark 框架中的错误?
非常感谢任何支持。
我发现了我的错误。我应该使用请求的 queryParams()
方法来获取所需的值,而不是在 decodeParams()
方法中手动解码正文中的参数。即使应用了过滤器,以下代码也适用于我:
post("/upload",(request, response) -> {
final String param1 = request.queryParams("key1");
final String param2 = request.queryParams("key2");
// post-process parameters
// ...
return "success";
});