diff options
| author | 刘永强 <[email protected]> | 2020-08-26 15:10:01 +0800 |
|---|---|---|
| committer | 刘永强 <[email protected]> | 2020-08-26 15:10:01 +0800 |
| commit | d8159fc2e73f8bd1a9032fcdb6cea6b194d9412d (patch) | |
| tree | 520430ba7971d08e2efccaa37c6eb34138f5c6c7 | |
| parent | 5efc1cd27cd6afa4eb7b48d676420d52209ddc35 (diff) | |
add RequestParamFilter
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); + } + + +} |
