SSM框架設置參數空格過濾器

        用戶在使用系統時有意無意可能會輸入空格,一般來說在字符串首尾的空格都是無意義的(密碼值除外),所以在使用SSM框架時可以加入參數空格過濾器。

·                  該圖中的字符串保存在數據庫前並未經過參數空格過濾器過濾,導致在數據庫裏的字符串前面存在空格。

       1.在項目包com.text.filter中,編寫參數空格編碼過濾器ParameterTrimFilter:

package com.text.filter;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
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.http.HttpServletRequest;

/**
 * 請求參數值空格過濾器(去除前後空格)
 */

public class ParameterTrimFilter implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest req = (HttpServletRequest)request;
		HashMap map = new HashMap(req.getParameterMap());
		if (map != null && map.size() > 0) {
			//hashmap的遍歷
			// 獲取鍵值對的迭代器
			Iterator it = map.entrySet().iterator();
			while(it.hasNext()){
				Map.Entry entry = (Map.Entry)it.next();
				String key = (String) entry.getKey();
				//直接用(String) entry.getValue()會爆出這個錯誤[Ljava.lang.String; cannot be cast to java.lang.String
				//不能把String[]轉化爲String類型。
	                        String[] value = (String[])entry.getValue();
	                        //去掉字符串兩端的多餘的空格
	                        for(int i = 0;i < value.length;i++){
	            	            value[i] = value[i].trim();
	                        }
	                        map.put(key, value);
			}
		}
		//使用HttpServletRequestWrapper重寫Request請求參數
		ChangeRequestWrapper changeRequestWrapper = new ChangeRequestWrapper(req,map);
                //chain.doFilter(request,response)將請求轉發給過濾器鏈上下一個filter,如果沒有filter那就是請求的資源。 
                //一般filter都是一個鏈,web.xml 裏面配置了幾個就有幾個。
                //一個一個的連在一起 :request -> filter1 -> filter2 ->filter3 -> .... -> request resource
		chain.doFilter(changeRequestWrapper, response);
	}

	public void destroy() {
		// TODO Auto-generated method stub
		
	}

}

          2.其中,ParameterRequestWrapper類(使用HttpServletRequestWrapper重寫Request請求參數):

package com.text.filter;

import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class ChangeRequestWrapper extends HttpServletRequestWrapper {
	private Map params; // 所有參數的Map集合
 
    public ChangeRequestWrapper(HttpServletRequest request, Map newParams) {
        super(request);
        params = newParams;
    }
 
    // 重寫幾個HttpServletRequestWrapper中的方法
 
    /**
     * 獲取所有參數名
     *
     * @return 返回所有參數名
     */
    @Override
    public Enumeration<String> getParameterNames() {
        Vector<String> vector = new Vector<String>(params.keySet());
        return vector.elements();
    }
 
    /**
     * 獲取指定參數名的值,如果有重複的參數名,則返回第一個的值 接收一般變量 ,如text類型
     *
     * @param name 指定參數名
     * @return 指定參數名的值
     */
    @Override
    public String getParameter(String name) {
    	Object v = this.params.get(name);
        if (v == null)
            return null;
        if (v instanceof String[]) {
            String[] strArr = (String[]) v;
            if (strArr.length > 0) {
                return strArr[0];
            }
            return null;
        }
        if (v instanceof String) {
            return (String) v;
        }
        return v.toString();
    }
 
 
    /**
     * 獲取指定參數名的所有值的數組,如:checkbox的所有數據
     * 接收數組變量 ,如checkobx類型
     */
    @Override
    public String[] getParameterValues(String name) {
    	Object v = this.params.get(name);
        if (v == null)
            return null;
        if (v instanceof String[])
            return (String[]) v;
        if (v instanceof String) {
            return new String[] { (String) v };
        }
        return new String[] { v.toString() };
    }
 
    @Override
    public Map getParameterMap() {
        return this.params;
    }
 
}

       3.在web.xml文件中配置去空格過濾器,並設置要對所有的請求進行過濾:

<!-- 配置去空格過濾器 -->
<filter>
    <filter-name>ParameterTrimFilter</filter-name>
    <filter-class>com.text.filter.ParameterTrimFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ParameterTrimFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章