春季启动拦截器,以检查请求参数中是否存在任何不安全的字符并进行处理

时间:2019-01-04 08:15:45

标签: spring-boot

我是春季靴的新手。

具有一个带有GET服务的Spring Boot应用程序。

@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}}

它无法捕获请求,并且控件不在函数内部。

如果我们改为将值作为值传递给参数subs:

%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

它工作正常。

为解决此问题,我在application.properties

中添加了以下内容
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

此外,在我的主类中添加了一个豆

@Bean
    public CharacterEncodingFilter characterEncodingFilter() {
        System.out.println("character encoding filter called");
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        characterEncodingFilter.setForceRequestEncoding(true);
        return characterEncodingFilter;
    }

此外,我尝试从

使用@Encoded

https://www.concretepage.com/webservices/resteasy-3/rest-web-service-jax-rs-encoded-annotation-example-with-resteasy-3

这些都没有解决问题。

如果我使用邮递员chrome应用程序作为客户端,则返回400,如果我从浏览器中访问此api,它也会返回400。但是最新版本的邮递员返回200。

如果我在postman中查看请求http代码,则新版本的postman中有{的请求,而postman的chrome应用显示%7B

如果在我的请求中我自己将{替换为%7B,则效果很好。如何在Spring Boot应用程序中解决此问题?

0 个答案:

没有答案