From 0f31b1fd43116d1faea0a9435365cc5f579e4e02 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sun, 23 Apr 2017 23:43:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 43 +++++-- udf-core-starter/pom.xml | 19 --- {udf-core-starter => udf-demo}/.checkstyle | 0 {udf-core-starter => udf-demo}/.gitignore | 0 .../.settings/.gitignore | 0 udf-demo/pom.xml | 51 ++++++++ .../udf/demo/UdfDemoApplication.java | 32 +++++ .../main/resources/bootstrap-dev.properties | 4 + .../main/resources/bootstrap-qa.properties | 4 + .../src/main/resources/bootstrap.properties | 50 ++++++++ udf-starter-core/.checkstyle | 7 ++ udf-starter-core/.gitignore | 4 + udf-starter-core/.settings/.gitignore | 2 + udf-starter-core/pom.xml | 65 ++++++++++ .../udf/core/ApplicationConfig.java | 114 ++++++++++++++++++ .../egridcloud/udf/core/BaseApplication.java | 50 ++++++++ .../egridcloud/udf/core/xss/XssFilter.java | 55 +++++++++ .../xss/XssHttpServletRequestWrapper.java | 57 +++++++++ .../udf/core/xss/XssStringJsonSerializer.java | 39 ++++++ 19 files changed, 569 insertions(+), 27 deletions(-) delete mode 100644 udf-core-starter/pom.xml rename {udf-core-starter => udf-demo}/.checkstyle (100%) rename {udf-core-starter => udf-demo}/.gitignore (100%) rename {udf-core-starter => udf-demo}/.settings/.gitignore (100%) create mode 100644 udf-demo/pom.xml create mode 100644 udf-demo/src/main/java/com/egridcloud/udf/demo/UdfDemoApplication.java create mode 100644 udf-demo/src/main/resources/bootstrap-dev.properties create mode 100644 udf-demo/src/main/resources/bootstrap-qa.properties create mode 100644 udf-demo/src/main/resources/bootstrap.properties create mode 100644 udf-starter-core/.checkstyle create mode 100644 udf-starter-core/.gitignore create mode 100644 udf-starter-core/.settings/.gitignore create mode 100644 udf-starter-core/pom.xml create mode 100644 udf-starter-core/src/main/java/com/egridcloud/udf/core/ApplicationConfig.java create mode 100644 udf-starter-core/src/main/java/com/egridcloud/udf/core/BaseApplication.java create mode 100644 udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssFilter.java create mode 100644 udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssHttpServletRequestWrapper.java create mode 100644 udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssStringJsonSerializer.java diff --git a/pom.xml b/pom.xml index 0a510c4..3524a36 100644 --- a/pom.xml +++ b/pom.xml @@ -4,14 +4,14 @@ 4.0.0 com.egridcloud.udf - udf-parent + udf-starter 1.0 pom - udf-parent + udf-starter http://www.egridcloud.com - 1.0 + 1.0 1.5.2.RELEASE Dalston.RELEASE UTF-8 @@ -21,8 +21,29 @@ - udf-core-starter + udf-starter-core + udf-demo + + + + + dev + + true + + + dev + + + + + qa + + qa + + + @@ -42,6 +63,12 @@ pom import + + + com.egridcloud.udf + udf-starter-core + ${udf-starter.version} + @@ -75,15 +102,15 @@ - + - + diff --git a/udf-core-starter/pom.xml b/udf-core-starter/pom.xml deleted file mode 100644 index 990c2ce..0000000 --- a/udf-core-starter/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - 4.0.0 - - udf-core-starter - udf-core-starter - jar - http://www.egridcloud.com - - - com.egridcloud.udf - udf-parent - 1.0 - - - - - diff --git a/udf-core-starter/.checkstyle b/udf-demo/.checkstyle similarity index 100% rename from udf-core-starter/.checkstyle rename to udf-demo/.checkstyle diff --git a/udf-core-starter/.gitignore b/udf-demo/.gitignore similarity index 100% rename from udf-core-starter/.gitignore rename to udf-demo/.gitignore diff --git a/udf-core-starter/.settings/.gitignore b/udf-demo/.settings/.gitignore similarity index 100% rename from udf-core-starter/.settings/.gitignore rename to udf-demo/.settings/.gitignore diff --git a/udf-demo/pom.xml b/udf-demo/pom.xml new file mode 100644 index 0000000..7c81d04 --- /dev/null +++ b/udf-demo/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + + udf-demo + udf-demo + jar + http://www.egridcloud.com + + + com.egridcloud.udf + udf-starter + 1.0 + + + + 8080 + + + + + + com.egridcloud.udf + udf-starter-core + + + + + + + ${project.basedir}/src/main/resources/ + true + + + + + org.springframework.boot + spring-boot-maven-plugin + ${springboot.version} + + + + repackage + + + + + + + diff --git a/udf-demo/src/main/java/com/egridcloud/udf/demo/UdfDemoApplication.java b/udf-demo/src/main/java/com/egridcloud/udf/demo/UdfDemoApplication.java new file mode 100644 index 0000000..73bc6c8 --- /dev/null +++ b/udf-demo/src/main/java/com/egridcloud/udf/demo/UdfDemoApplication.java @@ -0,0 +1,32 @@ +/** + * BaseApplication.java + * Created at 2016-10-02 + * Created by wangkang + * Copyright (C) 2016 egridcloud.com, All rights reserved. + */ +package com.egridcloud.udf.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.cloud.client.SpringCloudApplication; + +import com.egridcloud.udf.core.BaseApplication; + +/** + * 描述 : 系统入口 + * + * @author wangkang + * + */ +@SpringCloudApplication +public class UdfDemoApplication extends BaseApplication { + + /** + * 描述 : spring boot的入口,在整个项目中,包括其子项目在内, 只能有一个main方法,否则spring boot启动不起来 + * + * @param args 参数 + */ + public static void main(String[] args) { + SpringApplication.run(UdfDemoApplication.class, args); + } + +} diff --git a/udf-demo/src/main/resources/bootstrap-dev.properties b/udf-demo/src/main/resources/bootstrap-dev.properties new file mode 100644 index 0000000..b6fdc2a --- /dev/null +++ b/udf-demo/src/main/resources/bootstrap-dev.properties @@ -0,0 +1,4 @@ +######################################################## +###com.egridcloud.application.config (ApplicationConfig) +######################################################## +com.egridcloud.application.config.outputExceptionStackTrace=true \ No newline at end of file diff --git a/udf-demo/src/main/resources/bootstrap-qa.properties b/udf-demo/src/main/resources/bootstrap-qa.properties new file mode 100644 index 0000000..335a7cf --- /dev/null +++ b/udf-demo/src/main/resources/bootstrap-qa.properties @@ -0,0 +1,4 @@ +######################################################## +###com.egridcloud.application.config (ApplicationConfig) +######################################################## +com.egridcloud.application.config.outputExceptionStackTrace=false \ No newline at end of file diff --git a/udf-demo/src/main/resources/bootstrap.properties b/udf-demo/src/main/resources/bootstrap.properties new file mode 100644 index 0000000..2df7924 --- /dev/null +++ b/udf-demo/src/main/resources/bootstrap.properties @@ -0,0 +1,50 @@ +######################################################## +###com.egridcloud.application.config (ApplicationConfig) +######################################################## +com.egridcloud.application.config.encoding=UTF-8 +com.egridcloud.application.config.timeZone=Asia/Shanghai +com.egridcloud.application.config.dateFormat=yyyy-MM-dd'T'HH:mm:ss:SSSZ + +######################################################## +###INFO +######################################################## +info.build.group=${project.groupId} +info.build.artifact=${project.artifactId} +info.build.version=${project.version} +info.build.name=${project.name} + +######################################################## +###IDENTITY +######################################################## +spring.application.name=${project.name} +spring.application.systemTag=${project.name} + +######################################################## +###WEB PROPERTIES +######################################################## +server.port=${server.port} + +######################################################## +###PROFILES +######################################################## +spring.profiles.active=${profiles.activation} + +######################################################## +###SPRING MVC (WebMvcProperties) +######################################################## +spring.mandatory-file-encoding=${com.egridcloud.application.config.encoding} +spring.mvc.dateFormat=${com.egridcloud.application.config.dateFormat} +spring.mvc.throw-exception-if-no-handler-found=true +spring.resources.add-mappings=false + +######################################################## +###JACKSON ( JacksonProperties ) +######################################################## +spring.jackson.dateFormat=${com.egridcloud.application.config.dateFormat} +spring.jackson.jodaDateTimeFormat=${com.egridcloud.application.config.dateFormat} +spring.jackson.timeZone=${com.egridcloud.application.config.timeZone} +spring.jackson.serialization.INDENT_OUTPUT=true +spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=true +spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true +spring.jackson.parser.ALLOW_SINGLE_QUOTES=true +spring.jackson.parser.ALLOW_UNQUOTED_CONTROL_CHARS=true diff --git a/udf-starter-core/.checkstyle b/udf-starter-core/.checkstyle new file mode 100644 index 0000000..5b35a1b --- /dev/null +++ b/udf-starter-core/.checkstyle @@ -0,0 +1,7 @@ + + + + + + + diff --git a/udf-starter-core/.gitignore b/udf-starter-core/.gitignore new file mode 100644 index 0000000..c541155 --- /dev/null +++ b/udf-starter-core/.gitignore @@ -0,0 +1,4 @@ +/target/ +/bin/ +/.classpath +/.project diff --git a/udf-starter-core/.settings/.gitignore b/udf-starter-core/.settings/.gitignore new file mode 100644 index 0000000..6cb3d6d --- /dev/null +++ b/udf-starter-core/.settings/.gitignore @@ -0,0 +1,2 @@ +/org.eclipse.core.resources.prefs +/org.eclipse.jdt.core.prefs diff --git a/udf-starter-core/pom.xml b/udf-starter-core/pom.xml new file mode 100644 index 0000000..dfbba74 --- /dev/null +++ b/udf-starter-core/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + udf-starter-core + udf-starter-core + jar + http://www.egridcloud.com + + + com.egridcloud.udf + udf-starter + 1.0 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-aop + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.springframework.cloud + spring-cloud-starter-config + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + + org.springframework.cloud + spring-cloud-starter-ribbon + + + + + + org.springframework.cloud + spring-cloud-starter-hystrix + + + diff --git a/udf-starter-core/src/main/java/com/egridcloud/udf/core/ApplicationConfig.java b/udf-starter-core/src/main/java/com/egridcloud/udf/core/ApplicationConfig.java new file mode 100644 index 0000000..56be4ec --- /dev/null +++ b/udf-starter-core/src/main/java/com/egridcloud/udf/core/ApplicationConfig.java @@ -0,0 +1,114 @@ +/** + * ApplicationConfig.java + * Created at 2016-10-03 + * Created by wangkang + * Copyright (C) 2016 egridcloud.com, All rights reserved. + */ +package com.egridcloud.udf.core; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 描述 : 系统配置 + * + * @author wangkang + * + */ +@Component +@ConfigurationProperties(prefix = "com.egridcloud.application.config") +public class ApplicationConfig { + + /** + * 描述 : 是否输出异常堆栈 + */ + private boolean outputExceptionStackTrace = false; + + /** + * 描述 : 编码 + */ + private String encoding = "UTF-8"; + + /** + * 描述 : 时区 + */ + private String timeZone = "Asia/Shanghai"; + + /** + * 描述 : 日期格式 + */ + private String dateFormat = "yyyy-MM-dd'T'HH:mm:ss:SSSZ"; + + /** + * 描述 : 获取timeZone + * + * @return the timeZone + */ + public String getTimeZone() { + return timeZone; + } + + /** + * 描述 : 设置timeZone + * + * @param timeZone the timeZone to set + */ + public void setTimeZone(String timeZone) { + this.timeZone = timeZone; + } + + /** + * 描述 : 获取encoding + * + * @return the encoding + */ + public String getEncoding() { + return encoding; + } + + /** + * 描述 : 设置encoding + * + * @param encoding the encoding to set + */ + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + /** + * 描述 : 获取dateFormat + * + * @return the dateFormat + */ + public String getDateFormat() { + return dateFormat; + } + + /** + * 描述 : 设置dateFormat + * + * @param dateFormat the dateFormat to set + */ + public void setDateFormat(String dateFormat) { + this.dateFormat = dateFormat; + } + + /** + * 描述 : 获取outputExceptionStackTrace + * + * @return the outputExceptionStackTrace + */ + public boolean isOutputExceptionStackTrace() { + return outputExceptionStackTrace; + } + + /** + * 描述 : 设置outputExceptionStackTrace + * + * @param outputExceptionStackTrace the outputExceptionStackTrace to set + */ + public void setOutputExceptionStackTrace(boolean outputExceptionStackTrace) { + this.outputExceptionStackTrace = outputExceptionStackTrace; + } + +} diff --git a/udf-starter-core/src/main/java/com/egridcloud/udf/core/BaseApplication.java b/udf-starter-core/src/main/java/com/egridcloud/udf/core/BaseApplication.java new file mode 100644 index 0000000..e8d2d3a --- /dev/null +++ b/udf-starter-core/src/main/java/com/egridcloud/udf/core/BaseApplication.java @@ -0,0 +1,50 @@ +/** + * BaseApplication.java + * Created at 2016-10-02 + * Created by wangkang + * Copyright (C) 2016 egridcloud.com, All rights reserved. + */ +package com.egridcloud.udf.core; + +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; +import org.springframework.scheduling.annotation.EnableAsync; + +import com.egridcloud.udf.core.xss.XssStringJsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; + +/** + * 描述 : 系统入口 + * + * @author wangkang + * + */ +@ServletComponentScan +@ComponentScan(basePackages = { "com.egridcloud" }) +@EnableAsync +@RefreshScope +public class BaseApplication { + + /** + * 描述 : xssObjectMapper + * + * @param builder builder + * @return xssObjectMapper + */ + @Bean + public ObjectMapper xssObjectMapper(Jackson2ObjectMapperBuilder builder) { + //解析器 + ObjectMapper objectMapper = builder.createXmlMapper(false).build(); + //注册xss解析器 + SimpleModule xssModule = new SimpleModule("XssStringJsonSerializer"); + xssModule.addSerializer(new XssStringJsonSerializer()); + objectMapper.registerModule(xssModule); + //返回 + return objectMapper; + } + +} diff --git a/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssFilter.java b/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssFilter.java new file mode 100644 index 0000000..5b991d4 --- /dev/null +++ b/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssFilter.java @@ -0,0 +1,55 @@ +/** + * XssFilter.java + * Created at 2016-09-19 + * Created by wangkang + * Copyright (C) 2016 egridcloud.com, All rights reserved. + */ +package com.egridcloud.udf.core.xss; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 描述 : 跨站请求防范 + * + * @author wangkang + * + */ +@WebFilter(filterName = "xssFilter", urlPatterns = "/*", asyncSupported = true) +public class XssFilter implements Filter { + + /** + * 描述 : 日志 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(XssFilter.class); + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + LOGGER.debug("(XssFilter) initialize"); + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + XssHttpServletRequestWrapper xssRequest = + new XssHttpServletRequestWrapper((HttpServletRequest) request); + chain.doFilter(xssRequest, response); + } + + @Override + public void destroy() { + LOGGER.debug("(XssFilter) destroy"); + } + +} diff --git a/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssHttpServletRequestWrapper.java b/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000..4a2528b --- /dev/null +++ b/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssHttpServletRequestWrapper.java @@ -0,0 +1,57 @@ +/** + * XssHttpServletRequestWrapper.java + * Created at 2016-09-19 + * Created by wangkang + * Copyright (C) 2016 egridcloud.com, All rights reserved. + */ +package com.egridcloud.udf.core.xss; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +import org.springframework.web.util.HtmlUtils; + +/** + * 描述 : 跨站请求防范 + * + * @author wangkang + * + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + + /** + * 描述 : 构造函数 + * + * @param request 请求对象 + */ + public XssHttpServletRequestWrapper(HttpServletRequest request) { + super(request); + } + + @Override + public String getHeader(String name) { + String value = super.getHeader(name); + return HtmlUtils.htmlEscape(value); + } + + @Override + public String getParameter(String name) { + String value = super.getParameter(name); + return HtmlUtils.htmlEscape(value); + } + + @Override + public String[] getParameterValues(String name) { + String[] values = super.getParameterValues(name); + if (values != null) { + int length = values.length; + String[] escapseValues = new String[length]; + for (int i = 0; i < length; i++) { + escapseValues[i] = HtmlUtils.htmlEscape(values[i]); + } + return escapseValues; + } + return super.getParameterValues(name); + } + +} diff --git a/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssStringJsonSerializer.java b/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssStringJsonSerializer.java new file mode 100644 index 0000000..c9208f8 --- /dev/null +++ b/udf-starter-core/src/main/java/com/egridcloud/udf/core/xss/XssStringJsonSerializer.java @@ -0,0 +1,39 @@ +/** + * XssStringJsonSerializer.java + * Created at 2016-09-19 + * Created by wangkang + * Copyright (C) 2016 egridcloud.com, All rights reserved. + */ +package com.egridcloud.udf.core.xss; + +import java.io.IOException; + +import org.springframework.web.util.HtmlUtils; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +/** + * 描述 : 基于xss的JsonSerializer + * + * @author wangkang + * + */ +public class XssStringJsonSerializer extends JsonSerializer { + + @Override + public Class handledType() { + return String.class; + } + + @Override + public void serialize(String value, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) throws IOException { + if (value != null) { + String encodedValue = HtmlUtils.htmlEscape(value); + jsonGenerator.writeString(encodedValue); + } + } + +}