当前位置: 首页 > 知识库问答 >
问题:

如何在WebFilter的实现中获取路径变量?(ServerWebExchange)

季俭
2023-03-14

我在Spring反应式应用程序中工作。我知道如何使用HttpServletRequest在拦截器中获取PathVariable,有些是这样的:

request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); 

但是我们不得不做一些更改,现在我们有了一个WebFilter实现,所以我们不使用HttpServletRequest,而是使用ServerWebExchange

如何从ServerWebExchange获取路径变量?可能吗?

共有1个答案

卓宏达
2023-03-14

我认为没有直接的解决办法。

你能做的如下:

ServerWebExchange.getRequest()将返回ServerHttpRequest对象,因此您可以使用以下代码从该对象中提取URI

URI uri=serverHttpRequest.getURI()

然后,使用UriTemplate可以获得路径变量值。

这里是例子:

URI uri = new URI("abc.api.com/learn/sections/asdf-987/assignments/dsfwq98r7sdfg"); //suppose that your URI object is something like this
        String path = uri.getPath(); //get the path
        UriTemplate uriTemplate = new UriTemplate("/learn/sections/{sectionId}/assignments/{assigmentId}"); //create template
        Map<String, String> parameters = new HashMap<>();
        parameters = uriTemplate.match(path); //extract values form template
        System.out.println(parameters);

这应该产生:

 {sectionId=asdf-987, assigmentId=dsfwq98r7sdfg}
 类似资料:
  • 我正在处理一个安全过滤器,它需要根据path变量的值做一些检查。我试着这样做: 但映射始终为空,因此我的筛选器的优先级似乎高于在请求中填充属性的。 我已尝试添加以下配置: 这没有帮助,筛选器是在调用之前执行的。 在我的安全过滤器中,我获取Auth头,解密它,从中获取并将它与路径var值进行比较。如果这些ID不匹配,我返回403。 我想知道是否有可能覆盖这两个动作的顺序。或者,也许,有其他的方法来检

  • 我想从示例URL获取。 我知道,如果使用方法获取路径变量非常简单。 但是,过滤器是在servlet之前执行的。 或者,没有方法,有没有方法检索路径变量? 字符串实际上是可用的,我打算从中提取111。

  • 在实现持久底部栏时,当单击底部栏中的按钮时,需要恢复以前的路由。 单击底部栏中的按钮时,会保存其当前路线路径(/a/b/c ),并根据按钮的单击恢复先前保存的路线。 从概念上讲,用户会认为每个按钮都是一个工作区,其状态永远不会丢失(包括后退堆栈)。用户可以安全地从一个工作区切换到另一个工作区。 当路由重绕到根时,如何在Flutter中获取当前路由路径?

  • 问题内容: Python中是否有内置方法来获取所有类的实例变量的数组?例如,如果我有以下代码: 有没有办法让我做到这一点: 编辑:我最初是错误地要求类变量。 问题答案: 每个对象都有一个包含所有变量及其值的变量。 尝试这个

  • 问题内容: 我需要配置我的Jenkins服务器,并且需要向Jenkins配置添加Java路径。 但是我是lunix命令的新手,有什么建议吗? 我不知道在哪里安装它! 查看经过验证的答案! 问题答案: 这是解决方案 感谢tecadmin

  • 问题内容: 我想在变量中提取当前路径,并稍后在脚本中使用它 就像是: 稍后的: 但是多年来,我的bash技能已经生锈了。 我将如何进行呢? 问题答案: (如果路径包含空格,则必须使用引号。)