使用HttpServletRequestWrapper重寫Request請求參數

來源:互聯網
上載者:User

標籤:erro   col   byte   項目需求   family   ons   請求   rri   filter   

目的: 改變請求參數的值,滿足項目需求(如:過濾請求中 lang != zh 的請求)

方法: 1.使用 HttpServletRequestWrapper重寫

 1 public class ChangeRequestWrapper extends HttpServletRequestWrapper { 2     private Map<String, String[]> parameterMap; // 所有參數的Map集合 3  4     public ChangeRequestWrapper(HttpServletRequest request) { 5         super(request); 6         parameterMap = request.getParameterMap(); 7     } 8  9     // 重寫幾個HttpServletRequestWrapper中的方法10 11     /**12      * 擷取所有參數名13      *14      * @return 返回所有參數名15      */16     @Override17     public Enumeration<String> getParameterNames() {18         Vector<String> vector = new Vector<String>(parameterMap.keySet());19         return vector.elements();20     }21 22     /**23      * 擷取指定參數名的值,如果有重複的參數名,則返回第一個的值 接收一般變數 ,如text類型24      *25      * @param name 指定參數名26      * @return 指定參數名的值27      */28     @Override29     public String getParameter(String name) {30         String[] results = parameterMap.get(name);31         return results[0];32     }33 34 35     /**36      * 擷取指定參數名的所有值的數組,如:checkbox的所有資料37      * 接收陣列變數 ,如checkobx類型38      */39     @Override40     public String[] getParameterValues(String name) {41         return parameterMap.get(name);42     }43 44     @Override45     public Map<String, String[]> getParameterMap() {46         return parameterMap;47     }48 49     public void setParameterMap(Map<String, String[]> parameterMap) {50         this.parameterMap = parameterMap;51     }52 }

 


2.新增Filter
 1 public class LangFilter implements Filter { 2     @Override 3     public void init(FilterConfig filterConfig) throws ServletException { 4  5     } 6  7     @Override 8     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 9 10         ChangeRequestWrapper changeRequestWrapper = new ChangeRequestWrapper((HttpServletRequest) servletRequest);11 12         Map<String, String[]> parameterMap = new HashMap<>(changeRequestWrapper.getParameterMap());13 14         String[] strings = parameterMap.get("lang");
//邏輯代碼給定預設的參數值,如果參數不為中文,則直接返回異常15 if (strings == null || strings.length == 0) {16 strings = new String[1];17 strings[0] = "zh";18 parameterMap.put("lang", strings);19 changeRequestWrapper.setParameterMap(parameterMap);20 }else{21 String language = strings[0];22 if (!language.equals("zh")) {23 Map<String,String> error = new HashMap<>();24 error.put("code","500");25 26 ServletOutputStream outputStream = null;27 try {28 outputStream = servletResponse.getOutputStream();29 outputStream.write(JSONUtils.obj2Byte(error));30 } finally {31 if (outputStream != null) {32 outputStream.flush();33 outputStream.close();34 }35 }36 37 return;38 }39 }40 //使用複寫後的wrapper41 filterChain.doFilter(changeRequestWrapper, servletResponse);42 }43 44 @Override45 public void destroy() {46 47 }48 }

     3.web.xml增加一個過濾器處理

 1   <filter> 2         <filter-name>languageFilter</filter-name> 3         <filter-class>com.intercepor.LangFilter</filter-class> 4         <init-param> 5             <param-name>encoding</param-name> 6             <param-value>UTF-8</param-value> 7         </init-param> 8         <init-param> 9             <param-name>forceEncoding</param-name>10             <param-value>true</param-value>11         </init-param>12     </filter>13 14     <filter-mapping>15         <filter-name>languageFilter</filter-name>16         <url-pattern>*.do</url-pattern>17     </filter-mapping>

所有.do的請求,都會驗證此參數

 

 

使用HttpServletRequestWrapper重寫Request請求參數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.