SpringBoot設置Filter過濾請求參數

在使用springBoot進行項目開發時,遇到的需求是需要對用戶上傳的數據進行過濾,比如去除「< ' ^ %」等敏感字元。

自己在做的時候想到了兩個辦法去實現

  1. 寫一個過濾方法,在有數據操作的地方調用方法進行過濾,將過濾以後的字元串重新賦值。在百度中找到了一個前輩寫的博客,覺得很不錯就直接拿過來用了。

然後在需要進行操作的地方調用就可以了,但是每次都調用就顯得有些麻煩和尷尬。於是就進行嘗試第二個辦法

2.在request到達controller之前,對參數進行過濾,將特殊字元過濾掉后,再將數據寫入request。

首先是新建一個SecFilter類,實現Filter介面,重寫其中的方法,在dofilter中實現過濾。

Advertisements

但是在實際的操作中遇到了一些問題。在使用

並對返回值進行操作和修改的時候出現了

java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap

查詢相關資料后得知,以上方法的返回值是不可變的,不能直接進行操作與賦值。所以需要把返回值賦值給一個新的map即可。

new HashMap(request.getParameterMap());

在對得到的數據進行操作完成後,需要把過濾以後的map寫到request裡面,通過百度和Google查詢資料以後,找到了解決辦法。

要把修改以後的map加入到request中需要

Advertisements

定義ParameterRequestWrapper 繼承HttpServletRequestWrapper

然後在filter裡面的操作是:

通過以上的操作即可實現修改請求參數。

不過,在使用以上方法后,雖然實現了功能需求,但是還是有一些不對的地方,這種做法僅供參考,還需要進一步的優化。或者使用其他更好的辦法實現,歡迎大家指正。

Advertisements

你可能會喜歡