!10 sync 同步ruoyi-vue-plus更新

update sa-token 1.28.0 => 1.29.0
修复Xss注解字段值为空时的异常问题
删除方法无返回值时,方法注释上的@HTTP4O4
update 使用 satoken 自带的 BCrypt 工具 替换 Security 加密工具 减少依赖
优化流程任务方法,统一响应格式
fix 修复 R 参数位置错误
fix 修复 验证码 强制校验问题
update 返回体 统一
修复自定义组件file-upload无法显示第一个文件,列表显示的文件比实际文件少一个的问题
update 修改验证码校验 增加 uuid 空判断
update 优化代码生成
fix 修复因升级 sa-token 导致 doLogin 无法获取 token 问题
update 更新 swagger 配置类错误注释
update 优化 TreeBuildUtils 工具 使用反射自动获取顶级父id
fix 回滚代码生成部分优化 修复优化导致的问题
update 使用 hutool Dict 优化 JsonUtils 防止类型解析异常
update 优化代码生成 使用新 JsonUtils.parseMap 方法
This commit is contained in:
KonBAI
2022-02-15 14:20:20 +00:00
parent 39ef71246b
commit 8c029a3dc3
58 changed files with 246 additions and 255 deletions

View File

@@ -181,6 +181,11 @@ public interface GenConstants {
*/
String QUERY_LIKE = "LIKE";
/**
* 相等查询
*/
String QUERY_EQ = "EQ";
/**
* 需要
*/

View File

@@ -8,38 +8,10 @@ import com.ruoyi.common.utils.StringUtils;
/**
* web层通用数据处理
*
* @author ruoyi
* @author Lion Li
*/
public class BaseController {
/**
* 返回成功
*/
public R<Void> success() {
return R.ok();
}
/**
* 返回失败消息
*/
public R<Void> error() {
return R.fail();
}
/**
* 返回成功消息
*/
public R<Void> success(String message) {
return R.ok(message);
}
/**
* 返回失败消息
*/
public R<Void> error(String message) {
return R.fail(message);
}
/**
* 响应返回结果
*
@@ -57,7 +29,7 @@ public class BaseController {
* @return 操作结果
*/
protected R<Void> toAjax(boolean result) {
return result ? success() : error();
return result ? R.ok() : R.fail();
}
/**

View File

@@ -49,7 +49,7 @@ public class R<T> implements Serializable {
return restResult(null, SUCCESS, msg);
}
public static <T> R<T> ok(T data, String msg) {
public static <T> R<T> ok(String msg, T data) {
return restResult(data, SUCCESS, msg);
}
@@ -65,7 +65,7 @@ public class R<T> implements Serializable {
return restResult(data, FAIL, null);
}
public static <T> R<T> fail(T data, String msg) {
public static <T> R<T> fail(String msg, T data) {
return restResult(data, FAIL, msg);
}

View File

@@ -37,7 +37,6 @@ public class LoginBody {
/**
* 验证码
*/
@NotBlank(message = "{user.jcaptcha.blank}")
@ApiModelProperty(value = "验证码")
private String code;
@@ -45,6 +44,6 @@ public class LoginBody {
* 唯一标识
*/
@ApiModelProperty(value = "唯一标识")
private String uuid = "";
private String uuid;
}

View File

@@ -125,4 +125,19 @@ public class LoginHelper {
return UserType.getUserType(loginId);
}
/**
* 是否为管理员
*
* @param userId 用户ID
* @return 结果
*/
public static boolean isAdmin(Long userId) {
return userId != null && 1L == userId;
}
public static boolean isAdmin() {
Long userId = getUserId();
return userId != null && 1L == userId;
}
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.common.utils;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -12,7 +13,6 @@ import lombok.NoArgsConstructor;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* JSON 工具类
@@ -72,13 +72,23 @@ public class JsonUtils {
}
}
public static <T> Map<String, T> parseMap(String text) {
public static Dict parseMap(String text) {
if (StringUtils.isBlank(text)) {
return null;
}
try {
return OBJECT_MAPPER.readValue(text, new TypeReference<Map<String, T>>() {
});
return OBJECT_MAPPER.readValue(text, OBJECT_MAPPER.getTypeFactory().constructType(Dict.class));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static List<Dict> parseArrayMap(String text) {
if (StringUtils.isBlank(text)) {
return null;
}
try {
return OBJECT_MAPPER.readValue(text, OBJECT_MAPPER.getTypeFactory().constructCollectionType(List.class, Dict.class));
} catch (IOException e) {
throw new RuntimeException(e);
}

View File

@@ -1,47 +0,0 @@
package com.ruoyi.common.utils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* 安全服务工具类
*
* @author Long Li
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class SecurityUtils {
/**
* 生成BCryptPasswordEncoder密码
*
* @param password 密码
* @return 加密字符串
*/
public static String encryptPassword(String password) {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.encode(password);
}
/**
* 判断密码是否相同
*
* @param rawPassword 真实密码
* @param encodedPassword 加密后字符
* @return 结果
*/
public static boolean matchesPassword(String rawPassword, String encodedPassword) {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.matches(rawPassword, encodedPassword);
}
/**
* 是否为管理员
*
* @param userId 用户ID
* @return 结果
*/
public static boolean isAdmin(Long userId) {
return userId != null && 1L == userId;
}
}

View File

@@ -97,9 +97,8 @@ public class ServletUtils extends ServletUtil {
*
* @param response 渲染对象
* @param string 待渲染的字符串
* @return null
*/
public static String renderString(HttpServletResponse response, String string) {
public static void renderString(HttpServletResponse response, String string) {
try {
response.setStatus(HttpStatus.HTTP_OK);
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
@@ -108,7 +107,6 @@ public class ServletUtils extends ServletUtil {
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
@@ -119,12 +117,12 @@ public class ServletUtils extends ServletUtil {
public static boolean isAjaxRequest(HttpServletRequest request) {
String accept = request.getHeader("accept");
if (accept != null && accept.indexOf("application/json") != -1) {
if (accept != null && accept.contains("application/json")) {
return true;
}
String xRequestedWith = request.getHeader("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) {
if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) {
return true;
}
@@ -134,10 +132,7 @@ public class ServletUtils extends ServletUtil {
}
String ajax = request.getParameter("__ajax");
if (StringUtils.equalsAnyIgnoreCase(ajax, "json", "xml")) {
return true;
}
return false;
return StringUtils.equalsAnyIgnoreCase(ajax, "json", "xml");
}
public static String getClientIP() {

View File

@@ -1,9 +1,11 @@
package com.ruoyi.common.utils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.lang.tree.parser.NodeParser;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@@ -22,8 +24,12 @@ public class TreeBuildUtils extends TreeUtil {
*/
public static final TreeNodeConfig DEFAULT_CONFIG = TreeNodeConfig.DEFAULT_CONFIG.setNameKey("label");
public static <T> List<Tree<Long>> build(List<T> list, Long parentId, NodeParser<T, Long> nodeParser) {
return TreeUtil.build(list, parentId, DEFAULT_CONFIG, nodeParser);
public static <T, K> List<Tree<K>> build(List<T> list, NodeParser<T, K> nodeParser) {
if (CollUtil.isEmpty(list)) {
return null;
}
K k = ReflectUtils.invokeGetter(list.get(0), "parentId");
return TreeUtil.build(list, k, DEFAULT_CONFIG, nodeParser);
}
}

View File

@@ -1,5 +1,6 @@
package com.ruoyi.common.utils.ip;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.net.NetUtil;
import cn.hutool.http.HtmlUtil;
import cn.hutool.http.HttpUtil;
@@ -11,8 +12,6 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
/**
* 获取地址类
*
@@ -48,14 +47,14 @@ public class AddressUtils {
log.error("获取地理位置异常 {}", ip);
return UNKNOWN;
}
Map<String, String> obj = JsonUtils.parseMap(rspStr);
String region = obj.get("pro");
String city = obj.get("city");
Dict obj = JsonUtils.parseMap(rspStr);
String region = obj.getStr("pro");
String city = obj.getStr("city");
return String.format("%s %s", region, city);
} catch (Exception e) {
log.error("获取地理位置异常 {}", ip);
}
}
return address;
return UNKNOWN;
}
}