springmvc动态修改请求参数

@Slf4j
@Component
@WebFilter(filterName = "parameterFilter", urlPatterns = "/api/**")
public class ParameterFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
        String uri = request.getRequestURI();
        //判断是否文件上传
        if (uri.contains("api/system/addFeedback")) {
            chain.doFilter(request, response);
            return;
        }

        String secretKeyPassword = "gingerso";
        String filePath = getEnvironment().getProperty("configbean.filePath");
        String fileUrl = getEnvironment().getProperty("configbean.fileUrl");
        if (getEnvironment().getProperty("configbean.secretKeyPassword") != null) {
            secretKeyPassword = getEnvironment().getProperty("configbean.secretKeyPassword");
        }
        Lock lock=new ReentrantLock();
        lock.lock();
        try {
            //原始参数
            Map<String, String[]> sourceMap = request.getParameterMap();
            //解密后的参数
            Map<String, Object> params = CommonsUtil.getParamsMap(request, secretKeyPassword);
            StringBuffer sb = new StringBuffer();
            sb.append("\nsecretKeyPassword=" + secretKeyPassword);
            sb.append("\nfilePath=" + filePath);
            sb.append("\nfileUrl=" + fileUrl);
            sb.append("\n参数过滤器:URI=" + uri);
            sb.append("\n参数拦截器:加密参数=" + JSONObject.fromObject(sourceMap));
            sb.append("\n参数过滤器:解密参数=" + params);
            sb.append("\n参数过滤器:开始重新设置参数...");
            log.info(sb.toString());

            ParameterRequestWrapper wrapper = new ParameterRequestWrapper(request, params);
            chain.doFilter(wrapper, response);
        }finally {
            lock.unlock();
        }

    }

}

//--------------------------------------------------------------------------------------------------------------------------------------------

class ParameterRequestWrapper extends HttpServletRequestWrapper {
    Map<String, String[]> params = new HashMap<>();

    public ParameterRequestWrapper(HttpServletRequest request, Map<String, Object> map) {
        super(request);
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            String key = entry.getKey();
            Object obj = entry.getValue();
            if (obj == "\"\"") {
                obj = null;
            }
            if ("".equals(obj)) {
                obj = null;
            }
            if (obj != null) {
                params.put(key, new String[]{obj.toString()});
            }

        }
    }
    @Override
    public String getParameter(String name) {
        Object v = params.get(name);
        if (v == null) {
            return null;
        } else if (v instanceof String[]) {
            String[] strArr = (String[]) v;
            if (strArr.length > 0) {
                return strArr[0];
            } else {
                return null;
            }
        } else {
            return v.toString();
        }
    }

    @Override
    public Map<String, String[]> getParameterMap() {
        return params;
    }

    @Override
    public Enumeration<String> getParameterNames() {
        Vector<String> vector = new Vector<String>(params.keySet());
        return vector.elements();
    }

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

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值