工做中,想在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+"已解密"; } }