浏览代码

url中午编码filter

Raod 3 年之前
父节点
当前提交
00181aaa10

+ 77 - 0
report-core/src/main/java/com/anjiplus/template/gaea/business/filter/UrlDecodeFilter.java

@@ -0,0 +1,77 @@
+package com.anjiplus.template.gaea.business.filter;
+
+import com.anji.plus.gaea.constant.GaeaConstant;
+import org.apache.catalina.util.ParameterMap;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.ognl.IteratorEnumeration;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author: Raod
+ * @since: 2022-01-26
+ */
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE + 1)
+public class UrlDecodeFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
+        ParameterMap<String, String[]> parameterMap = (ParameterMap) httpServletRequest.getParameterMap();
+        ParamHttpServletRequestWrapper wrapper = new ParamHttpServletRequestWrapper(httpServletRequest, parameterMap);
+
+        Enumeration<String> parameterNames = wrapper.getParameterNames();
+        while (parameterNames.hasMoreElements()) {
+            String paramName = parameterNames.nextElement();
+            String parameter = httpServletRequest.getParameter(paramName);
+            if (StringUtils.isNotBlank(parameter)) {
+                String decode = URLDecoder.decode(parameter, GaeaConstant.CHARSET_UTF8);
+                parameterMap.setLocked(false);
+                parameterMap.put(paramName, new String[]{decode});
+            }
+        }
+        filterChain.doFilter(wrapper, servletResponse);
+    }
+
+    /**
+     * 参数
+     */
+    class ParamHttpServletRequestWrapper extends HttpServletRequestWrapper {
+
+        private ParameterMap<String, String[]> parameterMap;
+
+        public ParamHttpServletRequestWrapper(HttpServletRequest request, ParameterMap<String, String[]> parameterMap) {
+            super(request);
+            this.parameterMap = parameterMap;
+        }
+
+        @Override
+        public Map<String, String[]> getParameterMap() {
+            return parameterMap;
+        }
+
+        @Override
+        public Enumeration<String> getParameterNames() {
+
+            Set<String> keySet = parameterMap.keySet();
+            IteratorEnumeration iteratorEnumeration = new IteratorEnumeration(keySet.iterator());
+            return iteratorEnumeration;
+        }
+
+        @Override
+        public String[] getParameterValues(String name) {
+            return parameterMap.get(name);
+        }
+    }
+}