对put,delete的restful请求进行过滤处理的工具类

    xiaoxiao2025-03-30  7

    package com.lovo.util;

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;

    import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper;

    /**  * 对put,delete的restful请求进行过滤处理,主要是解析请求参数  *  * @author ljh Servlet Filter implementation class PutMethodFilter  */ @WebFilter("/*") public class PutMethodFilter implements Filter {

     /**   * Default constructor.   */  public PutMethodFilter() {

     }

     /**   * @see Filter#destroy()   */  public void destroy() {

     }

     /**   * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)   */  public void doFilter(ServletRequest request, ServletResponse response,    FilterChain chain) throws IOException, ServletException {   request.setCharacterEncoding("utf-8");   response.setContentType("text/html;charset=utf-8");

      HttpServletRequest req = (HttpServletRequest) request;

      // 得到请求提交方式   String method = req.getMethod().toUpperCase();

      // PUT请求不能通过 request.getparameter()得到参数   if ("GET".equals(method) || "PUT".equals(method)     || "DELETE".equals(method)) {

       StringBuilder content = new StringBuilder();

       if ("GET".equals(method)) {     if (req.getQueryString() != null) {      content.append(req.getQueryString());     }    } else {     BufferedReader in = new BufferedReader(new InputStreamReader(       request.getInputStream()));     String org_req_content;

        while ((org_req_content = in.readLine()) != null) {      content.append(org_req_content);     }    }        Map<String, String[]> map = parseRequestParameter(URLDecoder      .decode(content.toString(), "UTF-8"));    request.setAttribute(PutRequestWrapper.CUSTOMER_ATTR_KEY, map);

       // 包装成自定义的请�?    request = new PutRequestWrapper(req);   }

      chain.doFilter(request, response);  }

     /**   * 自定义参数解�? String queryStr = "c=8&d=100&f=&a=1&a=2&b=1&b=&c=&d=1&q=999&c=";   *   * @param content   * @return   */  public Map<String, String[]> parseRequestParameter(String content) {      Map<String, String[]> params = new HashMap<String, String[]>();      if (content == null || "".equals(content.trim())) {    return params;   }

      String[] tmp = content.split("&");

      // 处理多�?情况   Map<String, List<String>> multiValues = null;

      for (int i = 0; i < tmp.length; i++) {    String[] keyValue = tmp[i].split("=");    if (params.containsKey(keyValue[0])) {     // 处理checkbox之类的多值情�?,比如:ch1=111&ch1=222     List valuesList;     if (multiValues == null) {      multiValues = new HashMap<String, List<String>>();     }     if (multiValues.containsKey(keyValue[0])) {      valuesList = multiValues.get(keyValue[0]);      if (keyValue.length >= 2) {       valuesList.add(keyValue[1]);      } else {       // 处理提交的参数中没有值的情况,比如:?aa=&bb=111,其中aa就没有取�?       valuesList.add("");      }     } else {      valuesList = new ArrayList();      valuesList.add(params.get(keyValue[0])[0]);      if (keyValue.length >= 2) {       valuesList.add(keyValue[1]);      } else {       // 处理提交的参数中没有值的情况,比如:?aa=&bb=111,其中aa就没有取�?       valuesList.add("");      }      multiValues.put(keyValue[0], valuesList);     }

       } else {     // 普�?情况,没有多�?     if (keyValue.length >= 2) {      params.put(keyValue[0], new String[] { keyValue[1] });     } else {      // 处理提交的参数中没有�?��情况,比如:?aa=&bb=111,其中aa就没有取�?      params.put(keyValue[0], new String[] { "" });     }    }   }// end for

      if (multiValues != null) {    // 有多个�?的情�?    for (Iterator<String> its = multiValues.keySet().iterator(); its      .hasNext();) {     String key = its.next();     List<String> values = multiValues.get(key);     String[] strArray = new String[values.size()];     for (int i = 0; i < values.size(); i++) {      strArray[i] = values.get(i);     }     params.put(key, strArray);    }   }

      return params;  }

     /**   * @see Filter#init(FilterConfig)   */  public void init(FilterConfig fConfig) throws ServletException {     }

    }

    /**  * put请求包装�?  *  * @author ljh  *  */ class PutRequestWrapper extends HttpServletRequestWrapper {

     // 自定义解析完成后的参数,放入request中的key  public final static String CUSTOMER_ATTR_KEY = "customer.attribute.parameter";

     private Map<String, String[]> reqParams;

     public PutRequestWrapper(HttpServletRequest request) {   super(request);   reqParams = (Map<String, String[]>) request     .getAttribute(CUSTOMER_ATTR_KEY);  }

     @Override  public Map getParameterMap() {   return reqParams;  }

     @Override  public Enumeration getParameterNames() {   return Collections.enumeration(reqParams.keySet());  }

     @Override  public String[] getParameterValues(String name) {   return reqParams.get(name);  }

    }

    转载请注明原文地址: https://ju.6miu.com/read-1297541.html
    最新回复(0)