responseBodyConverter() {
+ StringHttpMessageConverter converter = new StringHttpMessageConverter(
+ Charset.forName("UTF-8"));
+ return converter;
+ }
+
+ @Bean
+ public RemoteIpFilter remoteIpFilter() {
+ return new RemoteIpFilter();
+ }
+
+ @Bean
+ public FilterRegistrationBean testFilterRegistration() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ registration.setFilter(new MyFilter());
+ registration.addUrlPatterns("/*");
+ registration.addInitParameter("name", "value");
+ registration.setName("MyFilter");
+ registration.setOrder(1);
+ return registration;
+ }
+
+ public class MyFilter implements Filter {
+ @Override
+ public void destroy() {
+ }
+
+ @Override
+ public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse,
+ final FilterChain chain)
+ throws IOException, ServletException {
+
+ final Gson gson = new Gson();
+ //final ResultData rd = new ResultData();
+ final ResponseWrapper responseWrapper=new ResponseWrapper();
+ final HttpServletRequest request = (HttpServletRequest) servletRequest;
+ final HttpServletResponse response = (HttpServletResponse) servletResponse;
+ response.setHeader("Access-Control-Allow-Origin", "*");
+ response.setHeader("Access-Control-Allow-Methods", "POST,GET,PUT,OPTIONS,DELETE");
+ response.setHeader("Access-Control-Max-Age", "3600");
+ response.setHeader("Access-Control-Allow-Headers", "Origin,X-Requested-With,Content-Type,Accept,Access-Token,token");
+ final String uri = request.getRequestURI();
+ String auth = request.getHeader("Access-Token");
+ Token token = null;
+ if (!uri.contains("/")) {
+ //if (!uri.contains("/login")&&!uri.contains("/autoLogin") && !uri.contains("/bindUserInfo") && !uri.contains("/uploadContractAttach") && !uri.contains("/uploadCertificateAttach") && !uri.contains("/uploadFiles") ) {
+ if (auth == null || "".equals(auth)) {
+ if (uri.contains("/file/download/")) {
+ auth = request.getParameter("token");
+ if (auth == null || "".equals(auth)) {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("UTF-8");
+ //rd.setMsg("Authentication Failed: Require Authorization");
+ responseWrapper.failure(StatusCode.SC_10000.val(),"Authentication Failed: Require Authorization");
+ //rd.setStatus("10000");
+ final String write = gson.toJson(responseWrapper);
+ response.getWriter().write(write);
+ return;
+ }
+ } else {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("UTF-8");
+ //rd.setMsg("Authentication Failed: Require Authorization");
+ responseWrapper.failure(StatusCode.SC_10000.val(),"Authentication Failed: Require Authorization");
+ //rd.setStatus("10000");
+ final String write = gson.toJson(responseWrapper);
+ response.getWriter().write(write);
+ return;
+ }
+ }
+ token = new Token(auth);
+ if (token.getErr() == Token.ExpiredJwtError) {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("UTF-8");
+ //rd.setMsg("Authentication Failed: 认证过期");
+ responseWrapper.failure(StatusCode.SC_10001.val(),"Authentication Failed: 认证过期");
+ // rd.setStatus("10000");
+ final String write = gson.toJson(responseWrapper);
+ response.getWriter().write(write);
+ return;
+ }
+ if (token.getErr() == Token.SignatureError) {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("UTF-8");
+ //rd.setMsg("Authentication Failed: 非法认证");
+ responseWrapper.failure(StatusCode.SC_10002.val(),"Authentication Failed: 非法认证");
+
+ //rd.setStatus("10000");
+ final String write = gson.toJson(responseWrapper);
+ response.getWriter().write(write);
+ return;
+ }
+ if (HttpRequestUtil.REDIS_SERVICE.getKeyValue(token.getUsername()) == null
+ || "".equals(HttpRequestUtil.REDIS_SERVICE.getKeyValue(token.getUsername()))) {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("UTF-8");
+ //rd.setMsg("会话过期,请重新登录");
+ responseWrapper.failure(StatusCode.SC_10003.val(),"会话过期,请重新登录");
+ //rd.setStatus("10000");
+ final String write = gson.toJson(responseWrapper);
+ response.getWriter().write(write);
+ return;
+ }
+ HttpRequestUtil.REDIS_SERVICE.setKeyTimeout(token.getUsername(), HttpRequestUtil.expire);
+ }
+ try {
+ chain.doFilter(request, response);
+ } catch (final Exception e) {
+ System.out.println(e.toString());
+ response.setContentType("application/json");
+ response.setCharacterEncoding("UTF-8");
+ //rd.setMsg("服务器异常");
+ responseWrapper.failure(StatusCode.SC_500.val(),"请求失败");
+ //rd.setStatus("10001");
+ final String write = gson.toJson(responseWrapper);
+ response.getWriter().write(write);
+ return;
+ }
+ }
+
+ @Override
+ public void init(FilterConfig arg0) throws ServletException {
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/soft/line/filter/GlobalApplicationContextHolder.java b/src/main/java/com/soft/line/filter/GlobalApplicationContextHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..b855667afe61f1768782f4395f8858d314b44d9c
--- /dev/null
+++ b/src/main/java/com/soft/line/filter/GlobalApplicationContextHolder.java
@@ -0,0 +1,71 @@
+package com.soft.line.filter;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class GlobalApplicationContextHolder implements ApplicationContextAware {
+
+ private static ApplicationContext context;
+
+ /**
+ * because the ApplicationContextAware interface is implemented,
+ * when it is configured as bean, it will automatically injecting ApplicationContext.
+ */
+ @Override
+ public void setApplicationContext(final ApplicationContext applicationContext) {
+ setAppContext(applicationContext);
+ }
+
+ /**
+ * provide a static method for setting up ApplicationContext.
+ *
+ * @param applicationContext
+ */
+ public static void setAppContext(final ApplicationContext applicationContext) {
+ context = applicationContext;
+ }
+
+ /**
+ * static method to obtain ApplicationContext
+ *
+ * @return
+ */
+ public static ApplicationContext getApplicationContext() {
+ return context;
+ }
+
+ /**
+ * get bean based on the bean name.
+ *
+ * @param name
+ *
+ * @return
+ */
+ public static Object getBean(final String name) {
+ return getApplicationContext().getBean(name);
+ }
+
+ /**
+ * get bean (generic) according to Class.
+ *
+ * @param clazz
+ * @return
+ */
+ public static T getBean(final Class clazz) {
+ return getApplicationContext().getBean(clazz);
+ }
+
+ /**
+ * get all the bean to implement an interface based on Class.
+ *
+ * @param clazz
+ * @return
+ */
+ public static Map getBeansOfType(final Class clazz) {
+ return getApplicationContext().getBeansOfType(clazz);
+ }
+}
diff --git a/src/main/java/com/soft/line/filter/GsonUtil.java b/src/main/java/com/soft/line/filter/GsonUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..901b3051743af975baffd2f6e54608f906e6f464
--- /dev/null
+++ b/src/main/java/com/soft/line/filter/GsonUtil.java
@@ -0,0 +1,19 @@
+package com.soft.line.filter;
+
+
+import com.google.gson.Gson;
+
+public class GsonUtil {
+ public static String javabeanToJson(final UserTokenDto user) {
+ final Gson gson = new Gson();
+ final String json = gson.toJson(user);
+ return json;
+ }
+
+ public static UserTokenDto jsonToJavaBean(final String json) {
+ final Gson gson = new Gson();
+ final UserTokenDto user = gson.fromJson(json, UserTokenDto.class);
+ return user;
+ }
+
+}
diff --git a/src/main/java/com/soft/line/filter/HttpRequestUtil.java b/src/main/java/com/soft/line/filter/HttpRequestUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2a57f269412bce8a15bc99d3be1cc5a5a7a6cb4
--- /dev/null
+++ b/src/main/java/com/soft/line/filter/HttpRequestUtil.java
@@ -0,0 +1,53 @@
+package com.soft.line.filter;
+
+
+import com.soft.line.util.redis.RedisClient;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class HttpRequestUtil {
+ public static final RedisClient REDIS_SERVICE = (RedisClient) GlobalApplicationContextHolder.getApplicationContext()
+ .getBean("redisClient");
+
+ public static final String key = "SOFTLINE-BUILD";
+ // 过期时间设置为 15 min
+ public static final Integer expire = 60*15;
+
+ public static UserTokenDto getUserToken() {
+
+ final RequestAttributes ra = RequestContextHolder.getRequestAttributes();
+ final ServletRequestAttributes sra = (ServletRequestAttributes) ra;
+ final HttpServletRequest request = sra.getRequest();
+ //HttpSession session=request.getSession();
+ final Map map = getHeadersInfo(request);
+ String token = map.get("access-token");
+ if (token == null || "".equals(token)) {
+ token = request.getParameter("token");
+ }
+ final Token tokenInfo = new Token(token);
+ String json = null;
+
+ json = REDIS_SERVICE.getKeyValue(tokenInfo.getUsername());
+
+ return GsonUtil.jsonToJavaBean(json);
+ }
+
+ private static Map getHeadersInfo(final HttpServletRequest request) {
+ final Map map = new HashMap();
+ final Enumeration headerNames = request.getHeaderNames();
+ while (headerNames.hasMoreElements()) {
+ final String key = headerNames.nextElement();
+ final String value = request.getHeader(key);
+ map.put(key, value);
+ }
+ return map;
+ }
+}
diff --git a/src/main/java/com/soft/line/filter/ResponseWrapper.java b/src/main/java/com/soft/line/filter/ResponseWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3ca08d0fefe728d551329694e8be0675a2ad741
--- /dev/null
+++ b/src/main/java/com/soft/line/filter/ResponseWrapper.java
@@ -0,0 +1,84 @@
+package com.soft.line.filter;
+
+
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class ResponseWrapper implements Serializable {
+
+ private static final String OK = "OK";
+ private static final String ERROR = "Error";
+ private static final String BOOL_RES_KEY = "result";
+ private ResponseWrapper.Meta meta;
+ private Object data;
+
+ public ResponseWrapper() {
+ }
+
+ public ResponseWrapper success(String code) {
+ return this.success(code, new HashMap(0));
+ }
+
+ public ResponseWrapper success(String code, Object data) {
+ this.meta = new ResponseWrapper.Meta(code, "OK");
+ this.data = data != null ? data : new HashMap(0);
+ return this;
+ }
+
+ public static ResponseWrapper successRespForBool(boolean result) {
+ ResponseWrapper dr = new ResponseWrapper();
+ Map res = new HashMap();
+ res.put("result", result);
+ dr.success(StatusCode.SC_200.val(), res);
+ return dr;
+ }
+
+ public static ResponseWrapper successRespForVoid() {
+ ResponseWrapper dr = new ResponseWrapper();
+ dr.success(StatusCode.SC_200.val());
+ return dr;
+ }
+
+ public ResponseWrapper failure(String code) {
+ return this.failure(code, "Error");
+ }
+
+ public ResponseWrapper failure(String code, String message) {
+ this.meta = new ResponseWrapper.Meta(code, message);
+ this.data = new HashMap(0);
+ return this;
+ }
+
+ public ResponseWrapper.Meta getMeta() {
+ return this.meta;
+ }
+
+ public Object getData() {
+ return this.data;
+ }
+
+ public static class Meta implements Serializable {
+ private String code;
+ private String message;
+
+ public Meta(String code) {
+ this(code, "");
+ }
+
+ public Meta(String code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ public String getCode() {
+ return this.code;
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+ }
+}
diff --git a/src/main/java/com/soft/line/filter/StatusCode.java b/src/main/java/com/soft/line/filter/StatusCode.java
new file mode 100644
index 0000000000000000000000000000000000000000..afad865709fd224b0aaa4bda711d35f98a7670fd
--- /dev/null
+++ b/src/main/java/com/soft/line/filter/StatusCode.java
@@ -0,0 +1,63 @@
+package com.soft.line.filter;
+
+public enum StatusCode {
+
+ SC_200("SC_200"),
+ SC_201("SC_201"),
+ SC_400("SC_400"),
+ SC_401("SC_401"),
+ SC_404("SC_404"),
+ SC_405("SC_405"),
+ SC_422("SC_422"),
+ SC_500("SC_500"),
+ SC_10000("SC_10000"),
+ SC_10001("SC_10001"),
+ SC_10002("SC_10002"),
+ SC_10004("SC_10004"),
+ SC_10003("SC_10003");
+
+
+
+ private String code;
+
+ private StatusCode(String code) {
+ this.code = code;
+ }
+
+ public String val() {
+ return this.code;
+ }
+
+ public static StatusCode valueOf(int code) {
+ switch (code) {
+ case 200:
+ return SC_200;
+ case 201:
+ return SC_201;
+ case 400:
+ return SC_400;
+ case 401:
+ return SC_401;
+ case 404:
+ return SC_404;
+ case 405:
+ return SC_405;
+ case 422:
+ return SC_422;
+ case 500:
+ return SC_500;
+ case 10000:
+ return SC_10000;
+ case 10001:
+ return SC_10001;
+ case 10002:
+ return SC_10002;
+ case 10003:
+ return SC_10003;
+ case 10004:
+ return SC_10004;
+ default:
+ return SC_500;
+ }
+ }
+}
diff --git a/src/main/java/com/soft/line/filter/Token.java b/src/main/java/com/soft/line/filter/Token.java
new file mode 100644
index 0000000000000000000000000000000000000000..1dfdc5e87611ee97b38ab5c8fcde5fc0b7d6f92e
--- /dev/null
+++ b/src/main/java/com/soft/line/filter/Token.java
@@ -0,0 +1,74 @@
+package com.soft.line.filter;
+
+import com.soft.line.auth.AuthConstant;
+import com.soft.line.auth.Md5Util;
+import com.soft.line.entity.UserInfo;
+import io.jsonwebtoken.*;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @author wu.xueqiao on 2020/5/12.
+ * @version 0.1
+ */
+public class Token {
+
+ private String account;
+
+ private String username;
+
+
+
+ private int err = 0;
+
+ public static final int ExpiredJwtError = 1;
+
+ public static final int SignatureError = 2;
+
+ public Token(final String token) {
+ try {
+// if (StringUtils.isEmpty(token) || token.length() < AuthConstant.TOKEN_MD5_LENGTH) {
+// return null;
+// }
+ String base64Token = token.substring(0, token.length() - AuthConstant.TOKEN_MD5_LENGTH);
+// if (!token.toUpperCase().endsWith(Md5Util.encodeMd5(base64Token + AuthConstant.SAFE_STRING).toUpperCase())) {
+// return null;
+// }
+ String tokenPlainText = new String(Base64.decodeBase64(base64Token));
+ tokenPlainText = tokenPlainText.substring(AuthConstant.USER_TOKEN_PREFIX.length());
+ String[] arr = tokenPlainText.split("-");
+// if (arr.length < 4 - 1) {
+// return null;
+// }
+
+// UserToken userToken = new UserToken();
+ UserInfo user = new UserInfo();
+ user.setId(Integer.valueOf(arr[0]));
+ user.setUserName(arr[1]);
+
+ this.username = arr[1];
+ } catch (final ExpiredJwtException e) {
+ this.err = ExpiredJwtError;
+ } catch (final SignatureException e) {
+ this.err = SignatureError;
+ }
+ }
+
+ public String getAccount() {
+
+ return account;
+ }
+
+
+ public String getUsername() {
+
+ return username;
+ }
+
+
+ public int getErr() {
+
+ return err;
+ }
+
+}
diff --git a/src/main/java/com/soft/line/filter/UserTokenDto.java b/src/main/java/com/soft/line/filter/UserTokenDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf738bad560e60a3428c108c781443d6115ae2d9
--- /dev/null
+++ b/src/main/java/com/soft/line/filter/UserTokenDto.java
@@ -0,0 +1,19 @@
+package com.soft.line.filter;
+
+import com.soft.line.entity.UserInfoToken;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+
+@Data
+public class UserTokenDto implements Serializable {
+
+ private UserInfoToken userInfo;
+
+ private String token;
+
+
+}
diff --git a/src/main/java/com/soft/line/mapper/AppletCertificateMapper.java b/src/main/java/com/soft/line/mapper/AppletCertificateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..904027fb983e0bece70864acd6b76d0cec2059da
--- /dev/null
+++ b/src/main/java/com/soft/line/mapper/AppletCertificateMapper.java
@@ -0,0 +1,130 @@
+package com.soft.line.mapper;
+
+import com.soft.line.entity.AppletCertificate;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 小程序 证书
+ *
+ * @author wpb
+ * @version 1.0
+ * @date 2020/6/3 15:46
+ */
+public interface AppletCertificateMapper {
+
+ /**
+ * 获取每个部门的证书总数
+ *
+ * @return
+ */
+ List