繁体   English   中英

在Spark Java中使用pac4j安全过滤器时,如何获取发布请求的参数?

[英]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"));

这种过滤的效果是主体(在我的第一个代码段中)为null。

在sparkjava Google小组中发现了这则旧文章,其中描述了相同的问题,包括对根本原因的首次分析。 不幸的是,它已经存在两年多了,尚未收到任何回复。

编辑:我正在使用Spark 2.5.5和spark-pac4j 2.0.0-RC2。

过滤后是否有办法检索所需的参数? 我是否需要调整过滤器? 还是这是Spark框架中的错误?

任何支持将不胜感激。

我发现了我的错误。 代替从身体参数手动在解码decodeParams()方法,我应该使用的请求的queryParams()方法来获得所需的值。 即使应用了过滤器,以下代码也对我有用:

post("/upload",(request, response) -> {     
    final String param1 = request.queryParams("key1");
    final String param2 = request.queryParams("key2");
    // post-process parameters
    // ...
    return "success";
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM