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);
+ }
+ }
+
+}