ApiBaseAction.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. package com.kmall.api.util;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.kmall.common.advice.CustomDateEditor;
  4. import com.kmall.common.advice.CustomSqlDateEditor;
  5. import com.kmall.common.advice.CustomTimestampEditor;
  6. import com.kmall.api.cache.UserTokenCache;
  7. import com.kmall.api.entity.TokenEntity;
  8. import com.kmall.api.interceptor.AuthorizationInterceptor;
  9. import org.apache.commons.logging.Log;
  10. import org.apache.commons.logging.LogFactory;
  11. import org.apache.log4j.Logger;
  12. import org.apache.shiro.authz.UnauthorizedException;
  13. import org.springframework.beans.TypeMismatchException;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.beans.propertyeditors.StringTrimmerEditor;
  16. import org.springframework.validation.BindException;
  17. import org.springframework.web.bind.MissingServletRequestParameterException;
  18. import org.springframework.web.bind.WebDataBinder;
  19. import org.springframework.web.bind.annotation.ExceptionHandler;
  20. import org.springframework.web.bind.annotation.InitBinder;
  21. import org.springframework.web.bind.annotation.ResponseBody;
  22. import org.springframework.web.context.request.WebRequest;
  23. import javax.servlet.http.HttpServletRequest;
  24. import javax.servlet.http.HttpServletResponse;
  25. import java.io.BufferedReader;
  26. import java.io.IOException;
  27. import java.sql.Timestamp;
  28. import java.util.Date;
  29. import java.util.HashMap;
  30. import java.util.Map;
  31. /**
  32. * @author Scott
  33. * @ClassName: ApiBaseAction
  34. * @Description: 基础控制类
  35. * @date 2016年9月2日
  36. */
  37. public class ApiBaseAction {
  38. protected Log logger = LogFactory.getLog(ApiBaseAction.class);
  39. /**
  40. * 得到request对象
  41. */
  42. @Autowired
  43. protected HttpServletRequest request;
  44. /**
  45. * 得到response对象
  46. */
  47. @Autowired
  48. protected HttpServletResponse response;
  49. /**
  50. * 参数绑定异常
  51. */
  52. @ExceptionHandler({BindException.class, MissingServletRequestParameterException.class, UnauthorizedException.class, TypeMismatchException.class})
  53. @ResponseBody
  54. public Map<String, Object> bindException(Exception e) {
  55. if (e instanceof BindException) {
  56. return toResponsObject(1, "参数绑定异常", e.getMessage());
  57. } else if (e instanceof UnauthorizedException) {
  58. return toResponsObject(1, "无访问权限", e.getMessage());
  59. }
  60. return toResponsObject(1, "处理异常", e.getMessage());
  61. }
  62. /**
  63. * @param requestCode
  64. * @param msg
  65. * @param data
  66. * @return Map<String,Object>
  67. * @throws
  68. * @Description:构建统一格式返回对象
  69. * @date 2016年9月2日
  70. * @author zhuliyun
  71. */
  72. public Map<String, Object> toResponsObject(int requestCode, String msg, Object data) {
  73. Map<String, Object> obj = new HashMap<String, Object>();
  74. obj.put("errno", requestCode);
  75. obj.put("errmsg", msg);
  76. if (data != null)
  77. obj.put("data", data);
  78. return obj;
  79. }
  80. public Map<String, Object> toResponsSuccess(Object data) {
  81. Map<String, Object> rp = toResponsObject(0, "执行成功", data);
  82. logger.info("response:" + rp);
  83. return rp;
  84. }
  85. public Map<String, Object> toResponsMsgSuccess(String msg) {
  86. return toResponsObject(0, msg, "");
  87. }
  88. public Map<String, Object> toResponsSuccessForSelect(Object data) {
  89. Map<String, Object> result = new HashMap<>(2);
  90. result.put("list", data);
  91. return toResponsObject(0, "执行成功", result);
  92. }
  93. public Map<String, Object> toResponsFail(String msg) {
  94. return toResponsObject(1, msg, null);
  95. }
  96. /**
  97. * initBinder 初始化绑定 <br>
  98. * 这里处理了3种类型<br>
  99. * 1、字符串自动 trim 去掉前后空格 <br>
  100. * 2、java.util.Date 转换为 "yyyy-MM-dd HH:mm:ss" 格式<br>
  101. * 3、java.sql.Date 转换为 "yyyy-MM-dd" 格式<br>
  102. * 4、java.util.Timestamps 时间转换
  103. *
  104. * @param binder WebDataBinder 要注册的binder
  105. * @param request 前端请求
  106. */
  107. @InitBinder
  108. public void initBinder(WebDataBinder binder, WebRequest request) {
  109. // 绑定java.util.Date 类型转换
  110. // SimpleDateFormat dateFormat = new
  111. // SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 设定前后台的格式对应
  112. // dateFormat.setLenient(false);
  113. binder.registerCustomEditor(Date.class, new CustomDateEditor());
  114. // 绑定 java.sql.Date类型
  115. binder.registerCustomEditor(java.sql.Date.class, new CustomSqlDateEditor());
  116. // Timestamp 绑定
  117. binder.registerCustomEditor(Timestamp.class, new CustomTimestampEditor());
  118. // 字符串自动Trim
  119. binder.registerCustomEditor(String.class, new StringTrimmerEditor(false));
  120. }
  121. /**
  122. * 获取请求方IP
  123. *
  124. * @return 客户端Ip
  125. */
  126. public String getClientIp() {
  127. String xff = request.getHeader("x-forwarded-for");
  128. if (xff == null) {
  129. return request.getRemoteAddr();
  130. }
  131. return xff;
  132. }
  133. public JSONObject getJsonRequest() {
  134. JSONObject result = null;
  135. StringBuilder sb = new StringBuilder();
  136. try (BufferedReader reader = request.getReader();) {
  137. char[] buff = new char[1024];
  138. int len;
  139. while ((len = reader.read(buff)) != -1) {
  140. sb.append(buff, 0, len);
  141. }
  142. result = JSONObject.parseObject(sb.toString());
  143. } catch (IOException e) {
  144. e.printStackTrace();
  145. }
  146. return result;
  147. }
  148. /**
  149. * 获取请求的openId
  150. *
  151. * @return 客户端Ip
  152. */
  153. public String getOpenId() {
  154. String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
  155. //查询token信息
  156. TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
  157. if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
  158. return null;
  159. }
  160. return tokenEntity.getOpenId();
  161. }
  162. public Long getUserId() {
  163. String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
  164. //查询token信息
  165. TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
  166. if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
  167. return null;
  168. }
  169. return tokenEntity.getUserId();
  170. }
  171. /**
  172. * 获取请求的门店Id
  173. *
  174. * @return 客户端Ip
  175. */
  176. public Long getStoreId() {
  177. String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
  178. //查询token信息
  179. TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
  180. if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
  181. return null;
  182. }
  183. return tokenEntity.getStoreId();
  184. }
  185. /**
  186. * 获取请求的商户编号
  187. *
  188. * @return 客户端Ip
  189. */
  190. public String getMerchSn() {
  191. String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
  192. //查询token信息
  193. TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
  194. if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
  195. return null;
  196. }
  197. return tokenEntity.getMerchSn();
  198. }
  199. }