修改HttpServletRequest中的參數

工做中,想在controller接收參數前修改入參值,好比前端將部分參數加密,我想在controller接收參數前解密而後將字段從新賦值,下面代碼能夠幫你實現。前端

@Component
@WebFilter(filterName="handleFilter",urlPatterns="/*")
public class HandleFilter extends OncePerRequestFilter {

	@Override
	protected void doFilterInternal(HttpServletRequest request,HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
		   ModifyParametersWrapper mParametersWrapper = new ModifyParametersWrapper(request);
	       filterChain.doFilter(mParametersWrapper, response);
	}

}



public class ModifyParametersWrapper  extends  HttpServletRequestWrapper{
	private Map<String, String[]> parameterMap; // 全部參數的Map集合
	public ModifyParametersWrapper(HttpServletRequest request) {
		super(request);
		parameterMap = request.getParameterMap();

	}

	/**
	 * 獲取全部參數名
	 * @return 返回全部參數名
	 */
	@Override
	public Enumeration<String> getParameterNames() {
		Vector<String> vector = new Vector<String>(parameterMap.keySet());
		return vector.elements();

	}



	/**
	 * 獲取指定參數名的值,若是有重複的參數名,則返回第一個的值 接收通常變量 ,如text類型
	 * @param name
	 *            指定參數名
	 * @return 指定參數名的值
	 */
	@Override
	public String getParameter(String name) {
		String[] results = parameterMap.get(name);
		if (results == null || results.length <= 0)
			return null;
		else {
			return results[0];
		}
	}



	/**
	 * 獲取指定參數名的全部值的數組,如:checkbox的全部數據
	 * 接收數組變量 ,如checkobx類型
	 */
	@Override
	public String[] getParameterValues(String name) {
		String[] results = parameterMap.get(name);
		if (results == null || results.length <= 0)
			return null;
		else {
			int length = results.length;
			if (needDecrpty()) {
				for (int i = 0; i < length; i++) {
					results[i] = decrpty(results[i]);
				}
			}
			return results;
		}
	}

	/**
	 * 是否須要解密
	 * @return
	 */
	private boolean needDecrpty() {
		String[] needDecrpty = parameterMap.get("needDecrpty");
		if (needDecrpty == null || needDecrpty.length == 0) {
			return false;
		} else {
			if ("true".equals(needDecrpty[0])) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 解密操做
	 * @return
	 */
	private String decrpty(String oldValue) {
		return oldValue+"已解密";
	}


}
相關文章
相關標籤/搜索