關於在Spring過濾器中修改request的引數值遇到的問題(二)
阿新 • • 發佈:2018-12-19
背景
見上一篇Blog關於在Spring過濾器中修改request的引數值遇到的問題(一)問題描述
Spring框架,使用過濾器解密request中的引數(修改Request中的值),並傳遞到下一個過濾器錯誤詳情
第一次的修改方式是這樣的(RSAUtil是封裝的一個工具類,filed是前臺input標籤的name)String encryptVal = request.getParameter(filed); String decryptVal = RSAUtil.decryptStringByJs(encryptVal); request.setAttribute(filed, decryptVal);
這樣在下一個過濾器中根本無法用getParameter取到解密的值。debugger後發現request.getParameter(name)方法是從一個Map中獲取的
第二次修改
Map<String, String[]> parameterMap = request.getParameterMap(); String encryptVal = request.getParameter(filed); String decryptVal = RSAUtil.decryptStringByJs(encryptVal); parameterMap.put(filed, decryptVal);
可是這次執行直接報錯:不能更改一個鎖定的Map,好吧,百度百度,找到解決方案
解決方案
定義一個request的包裝類import org.apache.catalina.util.ParameterMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.util.Map; public class ParameterRequestWrapper extends HttpServletRequestWrapper
使用該包裝類
ParameterRequestWrapper newRequest = new ParameterRequestWrapper(request); String encryptVal = request.getParameter(filed); String decryptVal = RSAUtil.decryptStringByJs(encryptVal); newRequest.addParameter(filed, decryptVal);
這下是搞定了,在之後的任何地方都可以用request.getParameter()來取得解密後的引數了
總結:有時候百度還是可以解決問題的,但接下來遇到的問題很尷尬百度沒有,見“關於在Spring過濾器中修改request的引數值遇到的問題(三)”