18°

修改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&lt;String&gt; getParameterNames() {
	Vector&lt;String&gt; vector = new Vector&lt;String&gt;(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 &lt;= 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 &lt;= 0)
		return null;
	else {
		int length = results.length;
		if (needDecrpty()) {
			for (int i = 0; i &lt; 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+"已解密";
}

}

 

本文由【青菜番茄h】发布于开源中国,原文链接:https://my.oschina.net/u/3745555/blog/3136098

全部评论: 0

    我有话说: