我有一个带有GET服务的spring启动应用程序。
@RequestMapping(value = "/abc/track/{type}", method = RequestMethod.GET)
public void DummFunc(
@RequestParam(value="subs", required = false) String sub,
, HttpServletResponse response) {}
subs
的值是一个编码值。
如果我把下面作为值传递给参数子
{%22endpoint%22:%22https://def.abc.com/tyu/send/eD3vpGNQW28:APA91bHOo8rYrV0xccdQz3okjZJG-QGrJX8LG6ahJnEUpMNfGedqi3hJxQsJx_8BMbH6oDjaSPPEXqzNWchWrGSkhuTkSdemikkys1U22Ipd7MsRw0owWbw89V2fslIVAJ6G5lkyvYuQ%22,%22expirationTime%22:null,%22keys%22:{%22p256dh%22:%22BK0pktn50CMsTQtqwdPlKlJtdFs0LFeXX14T1zgoz6QWnvSTp5dxtChnUP5P1JX0TsjcopbdPKyN31HfABMUyic%22,%22auth%22:%22qbO_z0vGao9wD-E5g8VU-A%22}}
它无法捕获请求,并且控件不在函数内部。
如果我们作为值传递给参数子:
%7B%22endpoint%22:%22https://def.abc.com/tyu/send/dX5q5eV7hFQ:APA91bHib-0QXrMzjatcvTR_uaIeeJK8lf6GmXUC9Jxv0Oxth-BzD4GmWnd4-YpDZv8qSFZ0eSg9mB2YkRvkc5ezdXW5KeaHjuQZfdyDxyBXjJgE-25Xbtlk37pdm8vfLk20k0k_VxW9%22,%22expirationTime%22:null,%22keys%22:%7B%22p256dh%22:%22BCCvcBLpRqp4u0auP688_MUJLsAiwWlQSn5kpyl8YVsEo_J-KpSdnhCmVIE_BhDXBcFYflPK52hqhYf3EaOCyuY%22,%22auth%22:%22iKuW_ESkCZnubWcQu_JK8w%22%7D%7D
它很好用。
>
由于服务器无法处理该请求,所以返回400。我需要捕获这些请求,然后通过正确编码来处理它们。前进的道路是什么?
我是新来的Spring启动/Spring和Java本身。如果我能得到一些见解,那就太好了。
另外,我可以在这里在线解码它们,没有任何问题-https://www.urldecoder.org/
编辑:基本上,有问题通过的请求是{
和}
而不是{
和}
。
我的问题是,如何在我的应用程序中捕获这些请求,对它们进行正确编码,然后处理它们,而不是应用程序因400个错误请求而失败。
由于Tomcat在URL参数中升级了他们的安全性。请找到可能的解决方案https://github.com/bohnman/squiggly/issues/42#issuecomment-386658525
这与Java和Spring本身无关,而是与HTML URL编码参考相关。URL只能使用ASCII字符集通过html" target="_blank">Internet发送。
RFC-1738开头定义了不安全字符,以下是列表:
"
除此之外,还有一些保留字符属于以下字符,用于区分参数、键值表示、端口等。
; / ? : @ =
您使用的不安全字符是{
和}
,它们等于{
和}
。
本质上,您不应该关心客户机以您描述的方式发送给您的数据。服务器必须要求传递正确的表单和URL。尽管浏览器和REST客户端会自动对这些字符进行编码,但以编程方式发送这些字符可能会导致错误。我知道Spring中仅有两个可用的解决方案是通过注册CharacterEncodingFilter
bean(已回答)或Spring Boot配置:
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
您需要首先启用编码并强制HTTP请求和响应。
Spring靴非常关心安全性。我想添加双引号/单引号或转义都不起作用。请通过:https://www.rfc-editor.org/rfc/rfc1738
我想你应该尝试手动编码{
到{
和}
到}
不安全:
由于多种原因,字符可能不安全。空格
字符是不安全的,因为当URL被转录或
排版或接受字处理程序处理时,有效空格可能会消失,
不重要空格可能会被引入
角色”
所有不安全字符必须始终在URL中编码。例如,字符“#”必须在URL中编码,即使在通常不处理片段或锚定
标识符的
系统中也是如此,因此如果URL复制到另一个使用它们的系统中,则无需更改URL编码。
Spring控制器有可能同时处理这两种请求吗? 1) 2) 如果我定义了一个这样的控制器:
问题内容: 如何在Ansible 1.9.2中转义双花括号? 例如,如何在以下shell命令中转义大括号? 问题答案: 这是一个非常干净和Ansible的本机解决方法,不依赖于花括号。我们假设之前我们刚刚使用 Ansible docker模块 引用了一个容器: 现在,在Variable中具有Docker容器的IP 。我还在我的文章《与Docker融为一体的婚姻》中发布了此变通办法。 [更新2015
本文向大家介绍如何在Java中处理Selenium中的代理?,包括了如何在Java中处理Selenium中的代理?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助PROXY类在Java中使用Selenium处理代理。
问题内容: 我想要一个文本区域,可以处理按 Tab 键的情况。 在默认情况下,如果您按 Tab 键,则焦点将离开文本区域。但是,当用户想要在文本区域中输入 Tab 键时会怎样呢? 我可以捕捉到此事件并将焦点返回到文本区域并将标签添加到 当前 光标位置吗? 问题答案:
问题内容: 在我的NodeJS 应用程序中,我有一些常用的路由。然后,在文件中,我想定义更多路线。 如何识别文件中定义的其他路由处理程序? 一个简单的 要求 似乎不起作用。 问题答案: 例如,如果要将 路线放在单独的文件中 ,则 可以通过以下方式创建文件: 然后您可以 通过这种方式传递 对象 来要求它: 看看这些例子 https://github.com/visionmedia/express/t