pom.xml
@@ -21,7 +21,6 @@ <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <druid.version>1.2.6</druid.version> <knife4j.version>3.0.2</knife4j.version> <fastjson.version>1.2.76</fastjson.version> <poi.version>4.1.2</poi.version> <velocity.version>1.7</velocity.version> <jwt.version>0.9.1</jwt.version> @@ -71,13 +70,6 @@ <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>${velocity.version}</version> </dependency> <!-- é¿éJSONè§£æå¨ --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <!-- Tokençæä¸è§£æ--> ruoyi-admin/src/main/resources/application.yml
@@ -11,7 +11,7 @@ # æä»¶è·¯å¾ profile: ./ruoyi/uploadPath # è·åipå°åå¼å ³ addressEnabled: false addressEnabled: true captcha: # éªè¯ç å¼å ³ ruoyi-common/pom.xml
@@ -53,12 +53,6 @@ <artifactId>jackson-databind</artifactId> </dependency> <!-- é¿éJSONè§£æå¨ --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <!-- excelå·¥å · --> <dependency> <groupId>org.apache.poi</groupId> ruoyi-common/src/main/java/com/ruoyi/common/utils/JsonUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,91 @@ package com.ruoyi.common.utils; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * JSON å·¥å ·ç±» * * @author èéæºç */ public class JsonUtils { private static ObjectMapper objectMapper = new ObjectMapper(); /** * åå§å objectMapper 屿§ * <p> * éè¿è¿æ ·çæ¹å¼ï¼ä½¿ç¨ Spring å建ç ObjectMapper Bean * * @param objectMapper ObjectMapper 对象 */ public static void init(ObjectMapper objectMapper) { JsonUtils.objectMapper = objectMapper; } public static String toJsonString(Object object) { try { return objectMapper.writeValueAsString(object); } catch (JsonProcessingException e) { throw new RuntimeException(e); } } public static <T> T parseObject(String text, Class<T> clazz) { if (StrUtil.isEmpty(text)) { return null; } try { return objectMapper.readValue(text, clazz); } catch (IOException e) { throw new RuntimeException(e); } } public static <T> T parseObject(byte[] bytes, Class<T> clazz) { if (ArrayUtil.isEmpty(bytes)) { return null; } try { return objectMapper.readValue(bytes, clazz); } catch (IOException e) { throw new RuntimeException(e); } } public static <T> T parseObject(String text, TypeReference<T> typeReference) { try { return objectMapper.readValue(text, typeReference); } catch (IOException e) { throw new RuntimeException(e); } } public static <T> Map<String, T> parseMap(String text) { try { return objectMapper.readValue(text, new TypeReference<Map<String, T>>() {}); } catch (IOException e) { throw new RuntimeException(e); } } public static <T> List<T> parseArray(String text, Class<T> clazz) { if (StrUtil.isEmpty(text)) { return new ArrayList<>(); } try { return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); } catch (IOException e) { throw new RuntimeException(e); } } } ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java
@@ -3,10 +3,12 @@ import cn.hutool.core.net.NetUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.utils.JsonUtils; import lombok.extern.slf4j.Slf4j; import java.util.Map; /** * è·åå°åç±» @@ -38,9 +40,9 @@ log.error("è·åå°çä½ç½®å¼å¸¸ {}", ip); return UNKNOWN; } JSONObject obj = JSONObject.parseObject(rspStr); String region = obj.getString("pro"); String city = obj.getString("city"); Map<String, String> obj = JsonUtils.parseMap(rspStr); String region = obj.get("pro"); String city = obj.get("city"); return String.format("%s %s", region, city); } catch (Exception e) { log.error("è·åå°çä½ç½®å¼å¸¸ {}", ip); ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
@@ -2,11 +2,11 @@ import cn.hutool.core.lang.Validator; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.enums.BusinessStatus; import com.ruoyi.common.enums.HttpMethod; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.framework.web.service.AsyncService; @@ -30,7 +30,6 @@ import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.util.Collection; import java.util.Iterator; import java.util.Map; /** @@ -94,7 +93,7 @@ String ip = ServletUtils.getClientIP(); operLog.setOperIp(ip); // è¿ååæ° operLog.setJsonResult(JSON.toJSONString(jsonResult)); operLog.setJsonResult(JsonUtils.toJsonString(jsonResult)); operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); if (loginUser != null) @@ -192,19 +191,16 @@ */ private String argsArrayToString(Object[] paramsArray) { String params = ""; StringBuilder params = new StringBuilder(); if (paramsArray != null && paramsArray.length > 0) { for (int i = 0; i < paramsArray.length; i++) { if (Validator.isNotNull(paramsArray[i]) && !isFilterObject(paramsArray[i])) { Object jsonObj = JSON.toJSON(paramsArray[i]); params += jsonObj.toString() + " "; } } for (Object o : paramsArray) { if (Validator.isNotNull(o) && !isFilterObject(o)) { params.append(JsonUtils.toJsonString(o)).append(" "); } } } return params.trim(); return params.toString().trim(); } /** @@ -224,19 +220,17 @@ else if (Collection.class.isAssignableFrom(clazz)) { Collection collection = (Collection) o; for (Iterator iter = collection.iterator(); iter.hasNext();) { return iter.next() instanceof MultipartFile; } for (Object value : collection) { return value instanceof MultipartFile; } } else if (Map.class.isAssignableFrom(clazz)) { Map map = (Map) o; for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); return entry.getValue() instanceof MultipartFile; } for (Object value : map.entrySet()) { Map.Entry entry = (Map.Entry) value; return entry.getValue() instanceof MultipartFile; } } return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse || o instanceof BindingResult; ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java
@@ -1,55 +1,56 @@ package com.ruoyi.framework.interceptor; import java.lang.reflect.Method; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.ServletUtils; /** * 鲿¢éå¤æäº¤æ¦æªå¨ * * @author ruoyi */ @Component public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); if (annotation != null) { if (this.isRepeatSubmit(request)) { AjaxResult ajaxResult = AjaxResult.error("ä¸å 许éå¤æäº¤ï¼è¯·ç¨ååè¯"); ServletUtils.renderString(response, JSONObject.toJSONString(ajaxResult)); return false; } } return true; } else { return super.preHandle(request, response, handler); } } /** * éªè¯æ¯å¦éå¤æäº¤ç±åç±»å®ç°å ·ä½çé²éå¤æäº¤çè§å * * @param request * @return * @throws Exception */ public abstract boolean isRepeatSubmit(HttpServletRequest request); } package com.ruoyi.framework.interceptor; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.ServletUtils; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; /** * 鲿¢éå¤æäº¤æ¦æªå¨ * * @author ruoyi */ @Component public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); if (annotation != null) { if (this.isRepeatSubmit(request)) { AjaxResult ajaxResult = AjaxResult.error("ä¸å 许éå¤æäº¤ï¼è¯·ç¨ååè¯"); ServletUtils.renderString(response, JsonUtils.toJsonString(ajaxResult)); return false; } } return true; } else { return super.preHandle(request, response, handler); } } /** * éªè¯æ¯å¦éå¤æäº¤ç±åç±»å®ç°å ·ä½çé²éå¤æäº¤çè§å * * @param request * @return * @throws Exception */ public abstract boolean isRepeatSubmit(HttpServletRequest request); } ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
@@ -2,10 +2,10 @@ import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Validator; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.filter.RepeatedlyRequestWrapper; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.framework.interceptor.RepeatSubmitInterceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -69,7 +69,7 @@ // bodyåæ°ä¸ºç©ºï¼è·åParameterçæ°æ® if (Validator.isEmpty(nowParams)) { nowParams = JSONObject.toJSONString(request.getParameterMap()); nowParams = JsonUtils.toJsonString(request.getParameterMap()); } Map<String, Object> nowDataMap = new HashMap<String, Object>(); nowDataMap.put(REPEAT_PARAMS, nowParams); ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java
@@ -2,8 +2,8 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSON; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.ServletUtils; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; @@ -16,7 +16,7 @@ /** * 认è¯å¤±è´¥å¤çç±» è¿åæªææ * * * @author ruoyi */ @Component @@ -30,6 +30,6 @@ { int code = HttpStatus.HTTP_UNAUTHORIZED; String msg = StrUtil.format("请æ±è®¿é®ï¼{}ï¼è®¤è¯å¤±è´¥ï¼æ æ³è®¿é®ç³»ç»èµæº", request.getRequestURI()); ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg))); ServletUtils.renderString(response, JsonUtils.toJsonString(AjaxResult.error(code, msg))); } } ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java
@@ -2,10 +2,10 @@ import cn.hutool.core.lang.Validator; import cn.hutool.http.HttpStatus; import com.alibaba.fastjson.JSON; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.framework.web.service.AsyncService; import com.ruoyi.framework.web.service.TokenService; @@ -47,7 +47,7 @@ // è®°å½ç¨æ·éåºæ¥å¿ asyncService.recordLogininfor(userName, Constants.LOGOUT, "éåºæå", request); } ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.HTTP_OK, "éåºæå"))); ServletUtils.renderString(response, JsonUtils.toJsonString(AjaxResult.error(HttpStatus.HTTP_OK, "éåºæå"))); } } ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
@@ -3,8 +3,6 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -12,6 +10,7 @@ import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.CustomException; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.file.FileUtils; @@ -130,7 +129,7 @@ @Override @Transactional public void updateGenTable(GenTable genTable) { String options = JSON.toJSONString(genTable.getParams()); String options = JsonUtils.toJsonString(genTable.getParams()); genTable.setOptions(options); int row = baseMapper.updateById(genTable); if (row > 0) { @@ -361,13 +360,12 @@ @Override public void validateEdit(GenTable genTable) { if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { String options = JSON.toJSONString(genTable.getParams()); JSONObject paramsObj = JSONObject.parseObject(options); if (Validator.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) { Map<String, Object> paramsObj = genTable.getParams(); if (Validator.isEmpty(paramsObj.get(GenConstants.TREE_CODE))) { throw new CustomException("æ ç¼ç åæ®µä¸è½ä¸ºç©º"); } else if (Validator.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) { } else if (Validator.isEmpty(paramsObj.get(GenConstants.TREE_PARENT_CODE))) { throw new CustomException("æ ç¶ç¼ç åæ®µä¸è½ä¸ºç©º"); } else if (Validator.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) { } else if (Validator.isEmpty(paramsObj.get(GenConstants.TREE_NAME))) { throw new CustomException("æ åç§°åæ®µä¸è½ä¸ºç©º"); } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) { if (Validator.isEmpty(genTable.getSubTableName())) { @@ -425,13 +423,13 @@ * @param genTable 设置åççæå¯¹è±¡ */ public void setTableFromOptions(GenTable genTable) { JSONObject paramsObj = JSONObject.parseObject(genTable.getOptions()); Map<String, String> paramsObj = JsonUtils.parseMap(genTable.getOptions()); if (Validator.isNotNull(paramsObj)) { String treeCode = paramsObj.getString(GenConstants.TREE_CODE); String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); String treeName = paramsObj.getString(GenConstants.TREE_NAME); String parentMenuId = paramsObj.getString(GenConstants.PARENT_MENU_ID); String parentMenuName = paramsObj.getString(GenConstants.PARENT_MENU_NAME); String treeCode = paramsObj.get(GenConstants.TREE_CODE); String treeParentCode = paramsObj.get(GenConstants.TREE_PARENT_CODE); String treeName = paramsObj.get(GenConstants.TREE_NAME); String parentMenuId = paramsObj.get(GenConstants.PARENT_MENU_ID); String parentMenuName = paramsObj.get(GenConstants.PARENT_MENU_NAME); genTable.setTreeCode(treeCode); genTable.setTreeParentCode(treeParentCode); ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
@@ -1,10 +1,11 @@ package com.ruoyi.generator.util; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.generator.domain.GenTable; import com.ruoyi.generator.domain.GenTableColumn; import org.apache.velocity.VelocityContext; @@ -12,10 +13,11 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; /** * 模æ¿å¤çå·¥å ·ç±» * * * @author ruoyi */ public class VelocityUtils @@ -75,7 +77,7 @@ public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) { String options = genTable.getOptions(); JSONObject paramsObj = JSONObject.parseObject(options); Map<String, Object> paramsObj = JsonUtils.parseMap(options); String parentMenuId = getParentMenuId(paramsObj); context.put("parentMenuId", parentMenuId); } @@ -83,7 +85,7 @@ public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) { String options = genTable.getOptions(); JSONObject paramsObj = JSONObject.parseObject(options); Map<String, Object> paramsObj = JsonUtils.parseMap(options); String treeCode = getTreecode(paramsObj); String treeParentCode = getTreeParentCode(paramsObj); String treeName = getTreeName(paramsObj); @@ -94,11 +96,11 @@ context.put("expandColumn", getExpandColumn(genTable)); if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE)); context.put("tree_parent_code", paramsObj.get(GenConstants.TREE_PARENT_CODE)); } if (paramsObj.containsKey(GenConstants.TREE_NAME)) { context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME)); context.put("tree_name", paramsObj.get(GenConstants.TREE_NAME)); } } @@ -300,11 +302,11 @@ * @param paramsObj çæå ¶ä»é项 * @return ä¸çº§èåIDåæ®µ */ public static String getParentMenuId(JSONObject paramsObj) public static String getParentMenuId(Map<String, Object> paramsObj) { if (Validator.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID)) { return paramsObj.getString(GenConstants.PARENT_MENU_ID); return Convert.toStr(paramsObj.get(GenConstants.PARENT_MENU_ID)); } return DEFAULT_PARENT_MENU_ID; } @@ -315,11 +317,11 @@ * @param paramsObj çæå ¶ä»é项 * @return æ ç¼ç */ public static String getTreecode(JSONObject paramsObj) public static String getTreecode(Map<String, Object> paramsObj) { if (paramsObj.containsKey(GenConstants.TREE_CODE)) { return StrUtil.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); return StrUtil.toCamelCase(Convert.toStr(paramsObj.get(GenConstants.TREE_CODE))); } return StrUtil.EMPTY; } @@ -330,11 +332,11 @@ * @param paramsObj çæå ¶ä»é项 * @return æ ç¶ç¼ç */ public static String getTreeParentCode(JSONObject paramsObj) public static String getTreeParentCode(Map<String, Object> paramsObj) { if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { return StrUtil.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); return StrUtil.toCamelCase(Convert.toStr(paramsObj.get(GenConstants.TREE_PARENT_CODE))); } return StrUtil.EMPTY; } @@ -345,11 +347,11 @@ * @param paramsObj çæå ¶ä»é项 * @return æ åç§° */ public static String getTreeName(JSONObject paramsObj) public static String getTreeName(Map<String, Object> paramsObj) { if (paramsObj.containsKey(GenConstants.TREE_NAME)) { return StrUtil.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); return StrUtil.toCamelCase(Convert.toStr(paramsObj.get(GenConstants.TREE_NAME))); } return StrUtil.EMPTY; } @@ -363,8 +365,8 @@ public static int getExpandColumn(GenTable genTable) { String options = genTable.getOptions(); JSONObject paramsObj = JSONObject.parseObject(options); String treeName = paramsObj.getString(GenConstants.TREE_NAME); Map<String, String> paramsObj = JsonUtils.parseMap(options); String treeName = paramsObj.get(GenConstants.TREE_NAME); int num = 0; for (GenTableColumn column : genTable.getColumns()) {