summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author刘永强 <[email protected]>2020-08-26 15:10:01 +0800
committer刘永强 <[email protected]>2020-08-26 15:10:01 +0800
commitd8159fc2e73f8bd1a9032fcdb6cea6b194d9412d (patch)
tree520430ba7971d08e2efccaa37c6eb34138f5c6c7
parent5efc1cd27cd6afa4eb7b48d676420d52209ddc35 (diff)
add RequestParamFilter
-rw-r--r--galaxy-common/src/main/java/com/mesalab/common/enums/QueryParamEnum.java12
-rw-r--r--galaxy-data-engine/src/main/java/com/mesalab/engine/GalaxyDataEngineApp.java9
-rw-r--r--galaxy-data-engine/src/main/java/com/mesalab/engine/component/filter/RequestParamFilter.java31
-rw-r--r--galaxy-data-engine/src/main/java/com/mesalab/engine/component/filter/RequestParamWrapper.java45
4 files changed, 97 insertions, 0 deletions
diff --git a/galaxy-common/src/main/java/com/mesalab/common/enums/QueryParamEnum.java b/galaxy-common/src/main/java/com/mesalab/common/enums/QueryParamEnum.java
new file mode 100644
index 0000000..b9718eb
--- /dev/null
+++ b/galaxy-common/src/main/java/com/mesalab/common/enums/QueryParamEnum.java
@@ -0,0 +1,12 @@
+package com.mesalab.common.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum QueryParamEnum {
+ QUERY("query"),
+ FORMAT("format"),
+ OPTION("option"),;
+ private String value;
+ QueryParamEnum(String value) {this.value = value;}
+}
diff --git a/galaxy-data-engine/src/main/java/com/mesalab/engine/GalaxyDataEngineApp.java b/galaxy-data-engine/src/main/java/com/mesalab/engine/GalaxyDataEngineApp.java
index 99b9016..708e09e 100644
--- a/galaxy-data-engine/src/main/java/com/mesalab/engine/GalaxyDataEngineApp.java
+++ b/galaxy-data-engine/src/main/java/com/mesalab/engine/GalaxyDataEngineApp.java
@@ -1,6 +1,8 @@
package com.mesalab.engine;
import org.springframework.boot.SpringApplication;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
@@ -19,4 +21,11 @@ public class GalaxyDataEngineApp {
SpringApplication.run(GalaxyDataEngineApp.class);
}
+ @Bean
+ public ServletWebServerFactory webServerFactory() {
+ TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
+ factory.addConnectorCustomizers(connector -> connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}"));
+ return factory;
+ }
+
}
diff --git a/galaxy-data-engine/src/main/java/com/mesalab/engine/component/filter/RequestParamFilter.java b/galaxy-data-engine/src/main/java/com/mesalab/engine/component/filter/RequestParamFilter.java
new file mode 100644
index 0000000..26f02c5
--- /dev/null
+++ b/galaxy-data-engine/src/main/java/com/mesalab/engine/component/filter/RequestParamFilter.java
@@ -0,0 +1,31 @@
+package com.mesalab.engine.component.filter;
+
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+
+@Component
+@WebFilter(urlPatterns = "/*")
+public class RequestParamFilter implements Filter {
+
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+
+ }
+
+
+ @Override
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+ filterChain.doFilter(new RequestParamWrapper((HttpServletRequest) servletRequest), servletResponse);
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+}
diff --git a/galaxy-data-engine/src/main/java/com/mesalab/engine/component/filter/RequestParamWrapper.java b/galaxy-data-engine/src/main/java/com/mesalab/engine/component/filter/RequestParamWrapper.java
new file mode 100644
index 0000000..779364a
--- /dev/null
+++ b/galaxy-data-engine/src/main/java/com/mesalab/engine/component/filter/RequestParamWrapper.java
@@ -0,0 +1,45 @@
+package com.mesalab.engine.component.filter;
+
+
+import com.google.common.collect.Lists;
+import com.mesalab.common.enums.QueryParamEnum;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.utils.URLEncodedUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.nio.charset.Charset;
+import java.util.List;
+
+public class RequestParamWrapper extends HttpServletRequestWrapper {
+ private String queryString = null;
+
+ RequestParamWrapper(HttpServletRequest request) {
+ super(request);
+ queryString = request.getQueryString();
+
+ }
+
+
+ @Override
+ public String[] getParameterValues(String name) {
+ if (QueryParamEnum.QUERY.getValue().equals(name)) {
+
+ queryString = queryString.replaceAll("\\+", "%2B");
+
+ List<NameValuePair> values = URLEncodedUtils.parse(queryString, Charset.forName("UTF-8"));
+ List<String> valueList = Lists.newArrayList();
+ for (NameValuePair nameValuePair : values) {
+ if (nameValuePair.getName().equals(QueryParamEnum.QUERY.getValue())) {
+ valueList.add(nameValuePair.getValue());
+ }
+ }
+ String[] valueString = new String[valueList.size()];
+ valueList.toArray(valueString);
+ return valueString;
+ }
+ return super.getParameterValues(name);
+ }
+
+
+}