update 统一格式化代码结构

This commit is contained in:
疯狂的狮子li 2021-10-22 10:04:15 +08:00
parent 32bfe334c0
commit 336adbd056
54 changed files with 806 additions and 987 deletions

View File

@ -36,7 +36,7 @@
<redisson.version>3.16.3</redisson.version> <redisson.version>3.16.3</redisson.version>
<lock4j.version>2.2.1</lock4j.version> <lock4j.version>2.2.1</lock4j.version>
<dynamic-ds.version>3.4.1</dynamic-ds.version> <dynamic-ds.version>3.4.1</dynamic-ds.version>
<tlog.version>1.3.2</tlog.version> <tlog.version>1.3.3</tlog.version>
<xxl-job.version>2.3.0</xxl-job.version> <xxl-job.version>2.3.0</xxl-job.version>
<!-- jdk11 缺失依赖 jaxb--> <!-- jdk11 缺失依赖 jaxb-->

View File

@ -1,10 +1,6 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented; import java.lang.annotation.*;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/** /**
* 数据权限过滤注解 * 数据权限过滤注解
@ -14,20 +10,19 @@ import java.lang.annotation.Target;
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Documented @Documented
public @interface DataScope public @interface DataScope {
{
/** /**
* 部门表的别名 * 部门表的别名
*/ */
public String deptAlias() default ""; String deptAlias() default "";
/** /**
* 用户表的别名 * 用户表的别名
*/ */
public String userAlias() default ""; String userAlias() default "";
/** /**
* 是否过滤用户权限 * 是否过滤用户权限
*/ */
public boolean isUser() default false; boolean isUser() default false;
} }

View File

@ -1,28 +1,23 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.enums.DataSourceType;
import java.lang.annotation.*;
/** /**
* 自定义多数据源切换注解 * 自定义多数据源切换注解
* * <p>
* 优先级先方法后类如果方法覆盖了类上的数据源类型以方法的为准否则以类上的为准 * 优先级先方法后类如果方法覆盖了类上的数据源类型以方法的为准否则以类上的为准
* *
* @author ruoyi * @author ruoyi
*/ */
@Target({ ElementType.METHOD, ElementType.TYPE }) @Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Documented @Documented
@Inherited @Inherited
public @interface DataSource public @interface DataSource {
{
/** /**
* 切换数据源名称 * 切换数据源名称
*/ */
public DataSourceType value() default DataSourceType.MASTER; DataSourceType value() default DataSourceType.MASTER;
} }

View File

@ -12,19 +12,19 @@ import java.lang.annotation.*;
@Inherited @Inherited
public @interface ExcelDictFormat { public @interface ExcelDictFormat {
/** /**
* 如果是字典类型请设置字典的type值 (: sys_user_sex) * 如果是字典类型请设置字典的type值 (: sys_user_sex)
*/ */
String dictType() default ""; String dictType() default "";
/** /**
* 读取内容转表达式 (: 0=,1=,2=未知) * 读取内容转表达式 (: 0=,1=,2=未知)
*/ */
String readConverterExp() default ""; String readConverterExp() default "";
/** /**
* 分隔符读取字符串组内容 * 分隔符读取字符串组内容
*/ */
String separator() default ","; String separator() default ",";
} }

View File

@ -1,46 +1,41 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.OperatorType; import com.ruoyi.common.enums.OperatorType;
import java.lang.annotation.*;
/** /**
* 自定义操作日志记录注解 * 自定义操作日志记录注解
* *
* @author ruoyi * @author ruoyi
*
*/ */
@Target({ ElementType.PARAMETER, ElementType.METHOD }) @Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Documented @Documented
public @interface Log public @interface Log {
{
/** /**
* 模块 * 模块
*/ */
public String title() default ""; String title() default "";
/** /**
* 功能 * 功能
*/ */
public BusinessType businessType() default BusinessType.OTHER; BusinessType businessType() default BusinessType.OTHER;
/** /**
* 操作人类别 * 操作人类别
*/ */
public OperatorType operatorType() default OperatorType.MANAGE; OperatorType operatorType() default OperatorType.MANAGE;
/** /**
* 是否保存请求的参数 * 是否保存请求的参数
*/ */
public boolean isSaveRequestData() default true; boolean isSaveRequestData() default true;
/** /**
* 是否保存响应的参数 * 是否保存响应的参数
*/ */
public boolean isSaveResponseData() default true; boolean isSaveResponseData() default true;
} }

View File

@ -1,40 +1,36 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.enums.LimitType; import com.ruoyi.common.enums.LimitType;
import java.lang.annotation.*;
/** /**
* 限流注解 * 限流注解
* *
* @author ruoyi * @author Lion Li
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Documented @Documented
public @interface RateLimiter public @interface RateLimiter {
{
/** /**
* 限流key * 限流key
*/ */
public String key() default Constants.RATE_LIMIT_KEY; String key() default Constants.RATE_LIMIT_KEY;
/** /**
* 限流时间,单位秒 * 限流时间,单位秒
*/ */
public int time() default 60; int time() default 60;
/** /**
* 限流次数 * 限流次数
*/ */
public int count() default 100; int count() default 100;
/** /**
* 限流类型 * 限流类型
*/ */
public LimitType limitType() default LimitType.DEFAULT; LimitType limitType() default LimitType.DEFAULT;
} }

View File

@ -1,11 +1,6 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.annotation;
import java.lang.annotation.Documented; import java.lang.annotation.*;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@ -19,12 +14,12 @@ import java.util.concurrent.TimeUnit;
@Documented @Documented
public @interface RepeatSubmit { public @interface RepeatSubmit {
/** /**
* 间隔时间(ms)小于此时间视为重复提交 * 间隔时间(ms)小于此时间视为重复提交
*/ */
int interval() default 5000; int interval() default 5000;
TimeUnit timeUnit() default TimeUnit.MILLISECONDS; TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
/** /**
* 提示消息 * 提示消息

View File

@ -7,8 +7,7 @@ import io.jsonwebtoken.Claims;
* *
* @author ruoyi * @author ruoyi
*/ */
public class Constants public class Constants {
{
/** /**
* UTF-8 字符集 * UTF-8 字符集
*/ */
@ -134,13 +133,13 @@ public class Constants
*/ */
public static final String SYS_DICT_KEY = "sys_dict:"; public static final String SYS_DICT_KEY = "sys_dict:";
/** /**
* RMI 远程方法调用 * RMI 远程方法调用
*/ */
public static final String LOOKUP_RMI = "rmi://"; public static final String LOOKUP_RMI = "rmi://";
/** /**
* LDAP 远程方法调用 * LDAP 远程方法调用
*/ */
public static final String LOOKUP_LDAP = "ldap://"; public static final String LOOKUP_LDAP = "ldap://";
} }

View File

@ -5,115 +5,184 @@ package com.ruoyi.common.constant;
* *
* @author ruoyi * @author ruoyi
*/ */
public class GenConstants public class GenConstants {
{ /**
/** 单表(增删改查) */ * 单表增删改查
*/
public static final String TPL_CRUD = "crud"; public static final String TPL_CRUD = "crud";
/** 树表(增删改查) */ /**
* 树表增删改查
*/
public static final String TPL_TREE = "tree"; public static final String TPL_TREE = "tree";
/** 主子表(增删改查) */ /**
* 主子表增删改查
*/
public static final String TPL_SUB = "sub"; public static final String TPL_SUB = "sub";
/** 树编码字段 */ /**
* 树编码字段
*/
public static final String TREE_CODE = "treeCode"; public static final String TREE_CODE = "treeCode";
/** 树父编码字段 */ /**
* 树父编码字段
*/
public static final String TREE_PARENT_CODE = "treeParentCode"; public static final String TREE_PARENT_CODE = "treeParentCode";
/** 树名称字段 */ /**
* 树名称字段
*/
public static final String TREE_NAME = "treeName"; public static final String TREE_NAME = "treeName";
/** 上级菜单ID字段 */ /**
* 上级菜单ID字段
*/
public static final String PARENT_MENU_ID = "parentMenuId"; public static final String PARENT_MENU_ID = "parentMenuId";
/** 上级菜单名称字段 */ /**
* 上级菜单名称字段
*/
public static final String PARENT_MENU_NAME = "parentMenuName"; public static final String PARENT_MENU_NAME = "parentMenuName";
/** 数据库字符串类型 */ /**
public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; * 数据库字符串类型
*/
public static final String[] COLUMNTYPE_STR = {"char", "varchar", "nvarchar", "varchar2"};
/** 数据库文本类型 */ /**
public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" }; * 数据库文本类型
*/
public static final String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"};
/** 数据库时间类型 */ /**
public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; * 数据库时间类型
*/
public static final String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"};
/** 数据库数字类型 */ /**
public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", * 数据库数字类型
"bit", "bigint", "float", "double", "decimal" }; */
public static final String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer",
"bit", "bigint", "float", "double", "decimal"};
/** BO对象 不需要添加字段 */ /**
public static final String[] COLUMNNAME_NOT_ADD = { "create_by", "create_time", "del_flag", "update_by", * BO对象 不需要添加字段
"update_time", "version" }; */
public static final String[] COLUMNNAME_NOT_ADD = {"create_by", "create_time", "del_flag", "update_by",
"update_time", "version"};
/** BO对象 不需要编辑字段 */ /**
public static final String[] COLUMNNAME_NOT_EDIT = { "create_by", "create_time", "del_flag", "update_by", * BO对象 不需要编辑字段
"update_time", "version" }; */
public static final String[] COLUMNNAME_NOT_EDIT = {"create_by", "create_time", "del_flag", "update_by",
"update_time", "version"};
/** VO对象 不需要返回字段 */ /**
public static final String[] COLUMNNAME_NOT_LIST = { "create_by", "create_time", "del_flag", "update_by", * VO对象 不需要返回字段
"update_time", "version" }; */
public static final String[] COLUMNNAME_NOT_LIST = {"create_by", "create_time", "del_flag", "update_by",
"update_time", "version"};
/** BO对象 不需要查询字段 */ /**
public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", * BO对象 不需要查询字段
"update_time", "remark", "version" }; */
public static final String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by",
"update_time", "remark", "version"};
/** Entity基类字段 */ /**
public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime" }; * Entity基类字段
*/
public static final String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime"};
/** Tree基类字段 */ /**
public static final String[] TREE_ENTITY = { "parentName", "parentId", "children" }; * Tree基类字段
*/
public static final String[] TREE_ENTITY = {"parentName", "parentId", "children"};
/** 文本框 */ /**
* 文本框
*/
public static final String HTML_INPUT = "input"; public static final String HTML_INPUT = "input";
/** 文本域 */ /**
* 文本域
*/
public static final String HTML_TEXTAREA = "textarea"; public static final String HTML_TEXTAREA = "textarea";
/** 下拉框 */ /**
* 下拉框
*/
public static final String HTML_SELECT = "select"; public static final String HTML_SELECT = "select";
/** 单选框 */ /**
* 单选框
*/
public static final String HTML_RADIO = "radio"; public static final String HTML_RADIO = "radio";
/** 复选框 */ /**
* 复选框
*/
public static final String HTML_CHECKBOX = "checkbox"; public static final String HTML_CHECKBOX = "checkbox";
/** 日期控件 */ /**
* 日期控件
*/
public static final String HTML_DATETIME = "datetime"; public static final String HTML_DATETIME = "datetime";
/** 图片上传控件 */ /**
* 图片上传控件
*/
public static final String HTML_IMAGE_UPLOAD = "imageUpload"; public static final String HTML_IMAGE_UPLOAD = "imageUpload";
/** 文件上传控件 */ /**
* 文件上传控件
*/
public static final String HTML_FILE_UPLOAD = "fileUpload"; public static final String HTML_FILE_UPLOAD = "fileUpload";
/** 富文本控件 */ /**
* 富文本控件
*/
public static final String HTML_EDITOR = "editor"; public static final String HTML_EDITOR = "editor";
/** 字符串类型 */ /**
* 字符串类型
*/
public static final String TYPE_STRING = "String"; public static final String TYPE_STRING = "String";
/** 整型 */ /**
* 整型
*/
public static final String TYPE_INTEGER = "Integer"; public static final String TYPE_INTEGER = "Integer";
/** 长整型 */ /**
* 长整型
*/
public static final String TYPE_LONG = "Long"; public static final String TYPE_LONG = "Long";
/** 浮点型 */ /**
* 浮点型
*/
public static final String TYPE_DOUBLE = "Double"; public static final String TYPE_DOUBLE = "Double";
/** 高精度计算类型 */ /**
* 高精度计算类型
*/
public static final String TYPE_BIGDECIMAL = "BigDecimal"; public static final String TYPE_BIGDECIMAL = "BigDecimal";
/** 时间类型 */ /**
* 时间类型
*/
public static final String TYPE_DATE = "Date"; public static final String TYPE_DATE = "Date";
/** 模糊查询 */ /**
* 模糊查询
*/
public static final String QUERY_LIKE = "LIKE"; public static final String QUERY_LIKE = "LIKE";
/** 需要 */ /**
* 需要
*/
public static final String REQUIRE = "1"; public static final String REQUIRE = "1";
} }

View File

@ -5,62 +5,96 @@ package com.ruoyi.common.constant;
* *
* @author ruoyi * @author ruoyi
*/ */
public class UserConstants public class UserConstants {
{
/** /**
* 平台内系统用户的唯一标志 * 平台内系统用户的唯一标志
*/ */
public static final String SYS_USER = "SYS_USER"; public static final String SYS_USER = "SYS_USER";
/** 正常状态 */ /**
* 正常状态
*/
public static final String NORMAL = "0"; public static final String NORMAL = "0";
/** 异常状态 */ /**
* 异常状态
*/
public static final String EXCEPTION = "1"; public static final String EXCEPTION = "1";
/** 用户封禁状态 */ /**
* 用户封禁状态
*/
public static final String USER_DISABLE = "1"; public static final String USER_DISABLE = "1";
/** 角色封禁状态 */ /**
* 角色封禁状态
*/
public static final String ROLE_DISABLE = "1"; public static final String ROLE_DISABLE = "1";
/** 部门正常状态 */ /**
* 部门正常状态
*/
public static final String DEPT_NORMAL = "0"; public static final String DEPT_NORMAL = "0";
/** 部门停用状态 */ /**
* 部门停用状态
*/
public static final String DEPT_DISABLE = "1"; public static final String DEPT_DISABLE = "1";
/** 字典正常状态 */ /**
* 字典正常状态
*/
public static final String DICT_NORMAL = "0"; public static final String DICT_NORMAL = "0";
/** 是否为系统默认(是) */ /**
* 是否为系统默认
*/
public static final String YES = "Y"; public static final String YES = "Y";
/** 是否菜单外链(是) */ /**
* 是否菜单外链
*/
public static final String YES_FRAME = "0"; public static final String YES_FRAME = "0";
/** 是否菜单外链(否) */ /**
* 是否菜单外链
*/
public static final String NO_FRAME = "1"; public static final String NO_FRAME = "1";
/** 菜单类型(目录) */ /**
* 菜单类型目录
*/
public static final String TYPE_DIR = "M"; public static final String TYPE_DIR = "M";
/** 菜单类型(菜单) */ /**
* 菜单类型菜单
*/
public static final String TYPE_MENU = "C"; public static final String TYPE_MENU = "C";
/** 菜单类型(按钮) */ /**
* 菜单类型按钮
*/
public static final String TYPE_BUTTON = "F"; public static final String TYPE_BUTTON = "F";
/** Layout组件标识 */ /**
* Layout组件标识
*/
public final static String LAYOUT = "Layout"; public final static String LAYOUT = "Layout";
/** ParentView组件标识 */ /**
* ParentView组件标识
*/
public final static String PARENT_VIEW = "ParentView"; public final static String PARENT_VIEW = "ParentView";
/** InnerLink组件标识 */ /**
* InnerLink组件标识
*/
public final static String INNER_LINK = "InnerLink"; public final static String INNER_LINK = "InnerLink";
/** 校验返回结果码 */ /**
* 校验返回结果码
*/
public final static String UNIQUE = "0"; public final static String UNIQUE = "0";
public final static String NOT_UNIQUE = "1"; public final static String NOT_UNIQUE = "1";

View File

@ -4,47 +4,39 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* web层通用数据处理 * web层通用数据处理
* *
* @author ruoyi * @author ruoyi
*/ */
public class BaseController public class BaseController {
{
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
/** /**
* 返回成功 * 返回成功
*/ */
public AjaxResult<Void> success() public AjaxResult<Void> success() {
{
return AjaxResult.success(); return AjaxResult.success();
} }
/** /**
* 返回失败消息 * 返回失败消息
*/ */
public AjaxResult<Void> error() public AjaxResult<Void> error() {
{
return AjaxResult.error(); return AjaxResult.error();
} }
/** /**
* 返回成功消息 * 返回成功消息
*/ */
public AjaxResult<Void> success(String message) public AjaxResult<Void> success(String message) {
{
return AjaxResult.success(message); return AjaxResult.success(message);
} }
/** /**
* 返回失败消息 * 返回失败消息
*/ */
public AjaxResult<Void> error(String message) public AjaxResult<Void> error(String message) {
{
return AjaxResult.error(message); return AjaxResult.error(message);
} }
@ -54,8 +46,7 @@ public class BaseController
* @param rows 影响行数 * @param rows 影响行数
* @return 操作结果 * @return 操作结果
*/ */
protected AjaxResult<Void> toAjax(int rows) protected AjaxResult<Void> toAjax(int rows) {
{
return rows > 0 ? AjaxResult.success() : AjaxResult.error(); return rows > 0 ? AjaxResult.success() : AjaxResult.error();
} }
@ -65,48 +56,42 @@ public class BaseController
* @param result 结果 * @param result 结果
* @return 操作结果 * @return 操作结果
*/ */
protected AjaxResult<Void> toAjax(boolean result) protected AjaxResult<Void> toAjax(boolean result) {
{
return result ? success() : error(); return result ? success() : error();
} }
/** /**
* 页面跳转 * 页面跳转
*/ */
public String redirect(String url) public String redirect(String url) {
{
return StringUtils.format("redirect:{}", url); return StringUtils.format("redirect:{}", url);
} }
/** /**
* 获取用户缓存信息 * 获取用户缓存信息
*/ */
public LoginUser getLoginUser() public LoginUser getLoginUser() {
{
return SecurityUtils.getLoginUser(); return SecurityUtils.getLoginUser();
} }
/** /**
* 获取登录用户id * 获取登录用户id
*/ */
public Long getUserId() public Long getUserId() {
{
return getLoginUser().getUserId(); return getLoginUser().getUserId();
} }
/** /**
* 获取登录部门id * 获取登录部门id
*/ */
public Long getDeptId() public Long getDeptId() {
{
return getLoginUser().getDeptId(); return getLoginUser().getDeptId();
} }
/** /**
* 获取登录用户名 * 获取登录用户名
*/ */
public String getUsername() public String getUsername() {
{
return getLoginUser().getUsername(); return getLoginUser().getUsername();
} }
} }

View File

@ -4,10 +4,8 @@ package com.ruoyi.common.enums;
* 操作状态 * 操作状态
* *
* @author ruoyi * @author ruoyi
*
*/ */
public enum BusinessStatus public enum BusinessStatus {
{
/** /**
* 成功 * 成功
*/ */

View File

@ -5,8 +5,7 @@ package com.ruoyi.common.enums;
* *
* @author ruoyi * @author ruoyi
*/ */
public enum BusinessType public enum BusinessType {
{
/** /**
* 其它 * 其它
*/ */

View File

@ -10,16 +10,16 @@ import lombok.Getter;
*/ */
@AllArgsConstructor @AllArgsConstructor
public enum DataSourceType { public enum DataSourceType {
/** /**
* 主库 * 主库
*/ */
MASTER("master"), MASTER("master"),
/** /**
* 从库 * 从库
*/ */
SLAVE("slave"); SLAVE("slave");
@Getter @Getter
private final String source; private final String source;
} }

View File

@ -1,36 +1,32 @@
package com.ruoyi.common.enums; package com.ruoyi.common.enums;
import org.springframework.lang.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.springframework.lang.Nullable;
/** /**
* 请求方式 * 请求方式
* *
* @author ruoyi * @author ruoyi
*/ */
public enum HttpMethod public enum HttpMethod {
{
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
private static final Map<String, HttpMethod> mappings = new HashMap<>(16); private static final Map<String, HttpMethod> mappings = new HashMap<>(16);
static static {
{ for (HttpMethod httpMethod : values()) {
for (HttpMethod httpMethod : values())
{
mappings.put(httpMethod.name(), httpMethod); mappings.put(httpMethod.name(), httpMethod);
} }
} }
@Nullable @Nullable
public static HttpMethod resolve(@Nullable String method) public static HttpMethod resolve(@Nullable String method) {
{
return (method != null ? mappings.get(method) : null); return (method != null ? mappings.get(method) : null);
} }
public boolean matches(String method) public boolean matches(String method) {
{
return (this == resolve(method)); return (this == resolve(method));
} }
} }

View File

@ -6,8 +6,7 @@ package com.ruoyi.common.enums;
* @author ruoyi * @author ruoyi
*/ */
public enum LimitType public enum LimitType {
{
/** /**
* 默认策略全局限流 * 默认策略全局限流
*/ */

View File

@ -5,8 +5,7 @@ package com.ruoyi.common.enums;
* *
* @author ruoyi * @author ruoyi
*/ */
public enum OperatorType public enum OperatorType {
{
/** /**
* 其它 * 其它
*/ */

View File

@ -5,26 +5,22 @@ package com.ruoyi.common.enums;
* *
* @author ruoyi * @author ruoyi
*/ */
public enum UserStatus public enum UserStatus {
{
OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
private final String code; private final String code;
private final String info; private final String info;
UserStatus(String code, String info) UserStatus(String code, String info) {
{
this.code = code; this.code = code;
this.info = info; this.info = info;
} }
public String getCode() public String getCode() {
{
return code; return code;
} }
public String getInfo() public String getInfo() {
{
return info; return info;
} }
} }

View File

@ -5,11 +5,9 @@ package com.ruoyi.common.exception;
* *
* @author ruoyi * @author ruoyi
*/ */
public class DemoModeException extends RuntimeException public class DemoModeException extends RuntimeException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public DemoModeException() public DemoModeException() {
{
} }
} }

View File

@ -5,8 +5,7 @@ package com.ruoyi.common.exception;
* *
* @author ruoyi * @author ruoyi
*/ */
public class GlobalException extends RuntimeException public class GlobalException extends RuntimeException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -17,7 +16,7 @@ public class GlobalException extends RuntimeException
/** /**
* 错误明细内部调试错误 * 错误明细内部调试错误
* * <p>
* {@link CommonResult#getDetailMessage()} 一致的设计 * {@link CommonResult#getDetailMessage()} 一致的设计
*/ */
private String detailMessage; private String detailMessage;
@ -25,33 +24,28 @@ public class GlobalException extends RuntimeException
/** /**
* 空构造方法避免反序列化问题 * 空构造方法避免反序列化问题
*/ */
public GlobalException() public GlobalException() {
{
} }
public GlobalException(String message) public GlobalException(String message) {
{
this.message = message; this.message = message;
} }
public String getDetailMessage() public String getDetailMessage() {
{
return detailMessage; return detailMessage;
} }
public GlobalException setDetailMessage(String detailMessage) public GlobalException setDetailMessage(String detailMessage) {
{
this.detailMessage = detailMessage; this.detailMessage = detailMessage;
return this; return this;
} }
public String getMessage() @Override
{ public String getMessage() {
return message; return message;
} }
public GlobalException setMessage(String message) public GlobalException setMessage(String message) {
{
this.message = message; this.message = message;
return this; return this;
} }

View File

@ -5,8 +5,7 @@ package com.ruoyi.common.exception;
* *
* @author ruoyi * @author ruoyi
*/ */
public final class ServiceException extends RuntimeException public final class ServiceException extends RuntimeException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
@ -21,7 +20,7 @@ public final class ServiceException extends RuntimeException
/** /**
* 错误明细内部调试错误 * 错误明细内部调试错误
* * <p>
* {@link CommonResult#getDetailMessage()} 一致的设计 * {@link CommonResult#getDetailMessage()} 一致的设计
*/ */
private String detailMessage; private String detailMessage;
@ -29,44 +28,37 @@ public final class ServiceException extends RuntimeException
/** /**
* 空构造方法避免反序列化问题 * 空构造方法避免反序列化问题
*/ */
public ServiceException() public ServiceException() {
{
} }
public ServiceException(String message) public ServiceException(String message) {
{
this.message = message; this.message = message;
} }
public ServiceException(String message, Integer code) public ServiceException(String message, Integer code) {
{
this.message = message; this.message = message;
this.code = code; this.code = code;
} }
public String getDetailMessage() public String getDetailMessage() {
{
return detailMessage; return detailMessage;
} }
public String getMessage() @Override
{ public String getMessage() {
return message; return message;
} }
public Integer getCode() public Integer getCode() {
{
return code; return code;
} }
public ServiceException setMessage(String message) public ServiceException setMessage(String message) {
{
this.message = message; this.message = message;
return this; return this;
} }
public ServiceException setDetailMessage(String detailMessage) public ServiceException setDetailMessage(String detailMessage) {
{
this.detailMessage = detailMessage; this.detailMessage = detailMessage;
return this; return this;
} }

View File

@ -5,22 +5,18 @@ package com.ruoyi.common.exception;
* *
* @author ruoyi * @author ruoyi
*/ */
public class UtilException extends RuntimeException public class UtilException extends RuntimeException {
{
private static final long serialVersionUID = 8247610319171014183L; private static final long serialVersionUID = 8247610319171014183L;
public UtilException(Throwable e) public UtilException(Throwable e) {
{
super(e.getMessage(), e); super(e.getMessage(), e);
} }
public UtilException(String message) public UtilException(String message) {
{
super(message); super(message);
} }
public UtilException(String message, Throwable throwable) public UtilException(String message, Throwable throwable) {
{
super(message, throwable); super(message, throwable);
} }
} }

View File

@ -2,14 +2,17 @@ package com.ruoyi.common.exception.base;
import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import lombok.*;
/** /**
* 基础异常 * 基础异常
* *
* @author ruoyi * @author ruoyi
*/ */
public class BaseException extends RuntimeException @Data
{ @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class BaseException extends RuntimeException {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
@ -32,66 +35,39 @@ public class BaseException extends RuntimeException
*/ */
private String defaultMessage; private String defaultMessage;
public BaseException(String module, String code, Object[] args, String defaultMessage) public BaseException(String module, String code, Object[] args, String defaultMessage) {
{
this.module = module; this.module = module;
this.code = code; this.code = code;
this.args = args; this.args = args;
this.defaultMessage = defaultMessage; this.defaultMessage = defaultMessage;
} }
public BaseException(String module, String code, Object[] args) public BaseException(String module, String code, Object[] args) {
{
this(module, code, args, null); this(module, code, args, null);
} }
public BaseException(String module, String defaultMessage) public BaseException(String module, String defaultMessage) {
{
this(module, null, null, defaultMessage); this(module, null, null, defaultMessage);
} }
public BaseException(String code, Object[] args) public BaseException(String code, Object[] args) {
{
this(null, code, args, null); this(null, code, args, null);
} }
public BaseException(String defaultMessage) public BaseException(String defaultMessage) {
{
this(null, null, null, defaultMessage); this(null, null, null, defaultMessage);
} }
@Override @Override
public String getMessage() public String getMessage() {
{
String message = null; String message = null;
if (!StringUtils.isEmpty(code)) if (!StringUtils.isEmpty(code)) {
{
message = MessageUtils.message(code, args); message = MessageUtils.message(code, args);
} }
if (message == null) if (message == null) {
{
message = defaultMessage; message = defaultMessage;
} }
return message; return message;
} }
public String getModule()
{
return module;
}
public String getCode()
{
return code;
}
public Object[] getArgs()
{
return args;
}
public String getDefaultMessage()
{
return defaultMessage;
}
} }

View File

@ -7,12 +7,10 @@ import com.ruoyi.common.exception.base.BaseException;
* *
* @author ruoyi * @author ruoyi
*/ */
public class FileException extends BaseException public class FileException extends BaseException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public FileException(String code, Object[] args) public FileException(String code, Object[] args) {
{
super("file", code, args, null); super("file", code, args, null);
} }

View File

@ -5,12 +5,10 @@ package com.ruoyi.common.exception.file;
* *
* @author ruoyi * @author ruoyi
*/ */
public class FileNameLengthLimitExceededException extends FileException public class FileNameLengthLimitExceededException extends FileException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public FileNameLengthLimitExceededException(int defaultFileNameLength) public FileNameLengthLimitExceededException(int defaultFileNameLength) {
{ super("upload.filename.exceed.length", new Object[]{defaultFileNameLength});
super("upload.filename.exceed.length", new Object[] { defaultFileNameLength });
} }
} }

View File

@ -5,12 +5,10 @@ package com.ruoyi.common.exception.file;
* *
* @author ruoyi * @author ruoyi
*/ */
public class FileSizeLimitExceededException extends FileException public class FileSizeLimitExceededException extends FileException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public FileSizeLimitExceededException(long defaultMaxSize) public FileSizeLimitExceededException(long defaultMaxSize) {
{ super("upload.exceed.maxSize", new Object[]{defaultMaxSize});
super("upload.exceed.maxSize", new Object[] { defaultMaxSize });
} }
} }

View File

@ -1,80 +1,60 @@
package com.ruoyi.common.exception.file; package com.ruoyi.common.exception.file;
import java.util.Arrays; import lombok.*;
import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.FileUploadException;
import java.util.Arrays;
/** /**
* 文件上传 误异常类 * 文件上传 误异常类
* *
* @author ruoyi * @author ruoyi
*/ */
public class InvalidExtensionException extends FileUploadException @Data
{ @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class InvalidExtensionException extends FileUploadException {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private String[] allowedExtension; private String[] allowedExtension;
private String extension; private String extension;
private String filename; private String filename;
public InvalidExtensionException(String[] allowedExtension, String extension, String filename) public InvalidExtensionException(String[] allowedExtension, String extension, String filename) {
{
super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]"); super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]");
this.allowedExtension = allowedExtension; this.allowedExtension = allowedExtension;
this.extension = extension; this.extension = extension;
this.filename = filename; this.filename = filename;
} }
public String[] getAllowedExtension() public static class InvalidImageExtensionException extends InvalidExtensionException {
{
return allowedExtension;
}
public String getExtension()
{
return extension;
}
public String getFilename()
{
return filename;
}
public static class InvalidImageExtensionException extends InvalidExtensionException
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) {
{
super(allowedExtension, extension, filename); super(allowedExtension, extension, filename);
} }
} }
public static class InvalidFlashExtensionException extends InvalidExtensionException public static class InvalidFlashExtensionException extends InvalidExtensionException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) {
{
super(allowedExtension, extension, filename); super(allowedExtension, extension, filename);
} }
} }
public static class InvalidMediaExtensionException extends InvalidExtensionException public static class InvalidMediaExtensionException extends InvalidExtensionException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) {
{
super(allowedExtension, extension, filename); super(allowedExtension, extension, filename);
} }
} }
public static class InvalidVideoExtensionException extends InvalidExtensionException public static class InvalidVideoExtensionException extends InvalidExtensionException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) {
{
super(allowedExtension, extension, filename); super(allowedExtension, extension, filename);
} }
} }

View File

@ -5,12 +5,10 @@ package com.ruoyi.common.exception.user;
* *
* @author ruoyi * @author ruoyi
*/ */
public class CaptchaException extends UserException public class CaptchaException extends UserException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public CaptchaException() public CaptchaException() {
{
super("user.jcaptcha.error", null); super("user.jcaptcha.error", null);
} }
} }

View File

@ -5,12 +5,10 @@ package com.ruoyi.common.exception.user;
* *
* @author ruoyi * @author ruoyi
*/ */
public class CaptchaExpireException extends UserException public class CaptchaExpireException extends UserException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public CaptchaExpireException() public CaptchaExpireException() {
{
super("user.jcaptcha.expire", null); super("user.jcaptcha.expire", null);
} }
} }

View File

@ -7,12 +7,10 @@ import com.ruoyi.common.exception.base.BaseException;
* *
* @author ruoyi * @author ruoyi
*/ */
public class UserException extends BaseException public class UserException extends BaseException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public UserException(String code, Object[] args) public UserException(String code, Object[] args) {
{
super("user", code, args, null); super("user", code, args, null);
} }
} }

View File

@ -5,12 +5,10 @@ package com.ruoyi.common.exception.user;
* *
* @author ruoyi * @author ruoyi
*/ */
public class UserPasswordNotMatchException extends UserException public class UserPasswordNotMatchException extends UserException {
{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public UserPasswordNotMatchException() public UserPasswordNotMatchException() {
{
super("user.password.not.match", null); super("user.password.not.match", null);
} }
} }

View File

@ -12,37 +12,29 @@ import java.io.IOException;
* *
* @author ruoyi * @author ruoyi
*/ */
public class RepeatableFilter implements Filter public class RepeatableFilter implements Filter {
{
@Override @Override
public void init(FilterConfig filterConfig) throws ServletException public void init(FilterConfig filterConfig) throws ServletException {
{
} }
@Override @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException throws IOException, ServletException {
{
ServletRequest requestWrapper = null; ServletRequest requestWrapper = null;
if (request instanceof HttpServletRequest if (request instanceof HttpServletRequest
&& StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) {
{
requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response); requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response);
} }
if (null == requestWrapper) if (null == requestWrapper) {
{
chain.doFilter(request, response); chain.doFilter(request, response);
} } else {
else
{
chain.doFilter(requestWrapper, response); chain.doFilter(requestWrapper, response);
} }
} }
@Override @Override
public void destroy() public void destroy() {
{
} }
} }

View File

@ -18,12 +18,10 @@ import java.nio.charset.StandardCharsets;
* *
* @author ruoyi * @author ruoyi
*/ */
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper {
{
private final byte[] body; private final byte[] body;
public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException {
{
super(request); super(request);
request.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8");
@ -32,44 +30,36 @@ public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
} }
@Override @Override
public BufferedReader getReader() throws IOException public BufferedReader getReader() throws IOException {
{
return new BufferedReader(new InputStreamReader(getInputStream())); return new BufferedReader(new InputStreamReader(getInputStream()));
} }
@Override @Override
public ServletInputStream getInputStream() throws IOException public ServletInputStream getInputStream() throws IOException {
{
final ByteArrayInputStream bais = new ByteArrayInputStream(body); final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return new ServletInputStream() return new ServletInputStream() {
{
@Override @Override
public int read() throws IOException public int read() throws IOException {
{
return bais.read(); return bais.read();
} }
@Override @Override
public int available() throws IOException public int available() throws IOException {
{
return body.length; return body.length;
} }
@Override @Override
public boolean isFinished() public boolean isFinished() {
{
return false; return false;
} }
@Override @Override
public boolean isReady() public boolean isReady() {
{
return false; return false;
} }
@Override @Override
public void setReadListener(ReadListener readListener) public void setReadListener(ReadListener readListener) {
{
} }
}; };

View File

@ -14,22 +14,18 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
public class XssFilter implements Filter public class XssFilter implements Filter {
{
/** /**
* 排除链接 * 排除链接
*/ */
public List<String> excludes = new ArrayList<>(); public List<String> excludes = new ArrayList<>();
@Override @Override
public void init(FilterConfig filterConfig) throws ServletException public void init(FilterConfig filterConfig) throws ServletException {
{
String tempExcludes = filterConfig.getInitParameter("excludes"); String tempExcludes = filterConfig.getInitParameter("excludes");
if (StringUtils.isNotEmpty(tempExcludes)) if (StringUtils.isNotEmpty(tempExcludes)) {
{
String[] url = tempExcludes.split(","); String[] url = tempExcludes.split(",");
for (int i = 0; url != null && i < url.length; i++) for (int i = 0; url != null && i < url.length; i++) {
{
excludes.add(url[i]); excludes.add(url[i]);
} }
} }
@ -37,12 +33,10 @@ public class XssFilter implements Filter
@Override @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException throws IOException, ServletException {
{
HttpServletRequest req = (HttpServletRequest) request; HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response; HttpServletResponse resp = (HttpServletResponse) response;
if (handleExcludeURL(req, resp)) if (handleExcludeURL(req, resp)) {
{
chain.doFilter(request, response); chain.doFilter(request, response);
return; return;
} }
@ -50,21 +44,18 @@ public class XssFilter implements Filter
chain.doFilter(xssRequest, response); chain.doFilter(xssRequest, response);
} }
private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) {
{
String url = request.getServletPath(); String url = request.getServletPath();
String method = request.getMethod(); String method = request.getMethod();
// GET DELETE 不过滤 // GET DELETE 不过滤
if (method == null || method.matches("GET") || method.matches("DELETE")) if (method == null || method.matches("GET") || method.matches("DELETE")) {
{
return true; return true;
} }
return StringUtils.matches(url, excludes); return StringUtils.matches(url, excludes);
} }
@Override @Override
public void destroy() public void destroy() {
{
} }
} }

View File

@ -19,26 +19,21 @@ import java.nio.charset.StandardCharsets;
* *
* @author ruoyi * @author ruoyi
*/ */
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
{
/** /**
* @param request * @param request
*/ */
public XssHttpServletRequestWrapper(HttpServletRequest request) public XssHttpServletRequestWrapper(HttpServletRequest request) {
{
super(request); super(request);
} }
@Override @Override
public String[] getParameterValues(String name) public String[] getParameterValues(String name) {
{
String[] values = super.getParameterValues(name); String[] values = super.getParameterValues(name);
if (values != null) if (values != null) {
{
int length = values.length; int length = values.length;
String[] escapseValues = new String[length]; String[] escapseValues = new String[length];
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++) {
{
// 防xss攻击和过滤前后空格 // 防xss攻击和过滤前后空格
escapseValues[i] = HtmlUtil.cleanHtmlTag(values[i]).trim(); escapseValues[i] = HtmlUtil.cleanHtmlTag(values[i]).trim();
} }
@ -48,18 +43,15 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
} }
@Override @Override
public ServletInputStream getInputStream() throws IOException public ServletInputStream getInputStream() throws IOException {
{
// 非json类型直接返回 // 非json类型直接返回
if (!isJsonRequest()) if (!isJsonRequest()) {
{
return super.getInputStream(); return super.getInputStream();
} }
// 为空直接返回 // 为空直接返回
String json = IoUtil.read(super.getInputStream(), StandardCharsets.UTF_8); String json = IoUtil.read(super.getInputStream(), StandardCharsets.UTF_8);
if (StringUtils.isEmpty(json)) if (StringUtils.isEmpty(json)) {
{
return super.getInputStream(); return super.getInputStream();
} }
@ -67,34 +59,28 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
json = HtmlUtil.cleanHtmlTag(json).trim(); json = HtmlUtil.cleanHtmlTag(json).trim();
byte[] jsonBytes = json.getBytes(StandardCharsets.UTF_8); byte[] jsonBytes = json.getBytes(StandardCharsets.UTF_8);
final ByteArrayInputStream bis = IoUtil.toStream(jsonBytes); final ByteArrayInputStream bis = IoUtil.toStream(jsonBytes);
return new ServletInputStream() return new ServletInputStream() {
{
@Override @Override
public boolean isFinished() public boolean isFinished() {
{
return true; return true;
} }
@Override @Override
public boolean isReady() public boolean isReady() {
{
return true; return true;
} }
@Override @Override
public int available() throws IOException public int available() throws IOException {
{
return jsonBytes.length; return jsonBytes.length;
} }
@Override @Override
public void setReadListener(ReadListener readListener) public void setReadListener(ReadListener readListener) {
{
} }
@Override @Override
public int read() throws IOException public int read() throws IOException {
{
return bis.read(); return bis.read();
} }
}; };
@ -105,8 +91,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
* *
* @param request * @param request
*/ */
public boolean isJsonRequest() public boolean isJsonRequest() {
{
String header = super.getHeader(HttpHeaders.CONTENT_TYPE); String header = super.getHeader(HttpHeaders.CONTENT_TYPE);
return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE);
} }

View File

@ -16,51 +16,51 @@ import java.util.stream.Collectors;
*/ */
public class BeanCopyUtils { public class BeanCopyUtils {
/** /**
* 单对象基于class创建拷贝 * 单对象基于class创建拷贝
* *
* @param source 数据来源实体 * @param source 数据来源实体
* @param copyOptions copy条件 * @param copyOptions copy条件
* @param desc 描述对象 转换后的对象 * @param desc 描述对象 转换后的对象
* @return desc * @return desc
*/ */
public static <T, V> V oneCopy(T source, CopyOptions copyOptions, Class<V> desc) { public static <T, V> V oneCopy(T source, CopyOptions copyOptions, Class<V> desc) {
V v = ReflectUtil.newInstanceIfPossible(desc); V v = ReflectUtil.newInstanceIfPossible(desc);
return oneCopy(source, copyOptions, v); return oneCopy(source, copyOptions, v);
} }
/** /**
* 单对象基于对象创建拷贝 * 单对象基于对象创建拷贝
* *
* @param source 数据来源实体 * @param source 数据来源实体
* @param copyOptions copy条件 * @param copyOptions copy条件
* @param desc 转换后的对象 * @param desc 转换后的对象
* @return desc * @return desc
*/ */
public static <T, V> V oneCopy(T source, CopyOptions copyOptions, V desc) { public static <T, V> V oneCopy(T source, CopyOptions copyOptions, V desc) {
if (ObjectUtil.isNull(source)) { if (ObjectUtil.isNull(source)) {
return null; return null;
} }
return BeanCopier.create(source, desc, copyOptions).copy(); return BeanCopier.create(source, desc, copyOptions).copy();
} }
/** /**
* 列表对象基于class创建拷贝 * 列表对象基于class创建拷贝
* *
* @param sourceList 数据来源实体列表 * @param sourceList 数据来源实体列表
* @param copyOptions copy条件 * @param copyOptions copy条件
* @param desc 描述对象 转换后的对象 * @param desc 描述对象 转换后的对象
* @return desc * @return desc
*/ */
public static <T, V> List<V> listCopy(List<T> sourceList, CopyOptions copyOptions, Class<V> desc) { public static <T, V> List<V> listCopy(List<T> sourceList, CopyOptions copyOptions, Class<V> desc) {
if (ObjectUtil.isNull(sourceList)) { if (ObjectUtil.isNull(sourceList)) {
return null; return null;
} }
if (CollUtil.isEmpty(sourceList)) { if (CollUtil.isEmpty(sourceList)) {
return CollUtil.newArrayList(); return CollUtil.newArrayList();
} }
return sourceList.stream() return sourceList.stream()
.map(source -> oneCopy(source, copyOptions, desc)) .map(source -> oneCopy(source, copyOptions, desc))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
} }

View File

@ -1,18 +1,19 @@
package com.ruoyi.common.utils; package com.ruoyi.common.utils;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
/** /**
* 时间工具类 * 时间工具类
* *
* @author ruoyi * @author ruoyi
*/ */
public class DateUtils extends org.apache.commons.lang3.time.DateUtils public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
{
public static String YYYY = "yyyy"; public static String YYYY = "yyyy";
public static String YYYY_MM = "yyyy-MM"; public static String YYYY_MM = "yyyy-MM";
@ -33,8 +34,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
* *
* @return Date() 当前日期 * @return Date() 当前日期
*/ */
public static Date getNowDate() public static Date getNowDate() {
{
return new Date(); return new Date();
} }
@ -43,44 +43,34 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
* *
* @return String * @return String
*/ */
public static String getDate() public static String getDate() {
{
return dateTimeNow(YYYY_MM_DD); return dateTimeNow(YYYY_MM_DD);
} }
public static final String getTime() public static final String getTime() {
{
return dateTimeNow(YYYY_MM_DD_HH_MM_SS); return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
} }
public static final String dateTimeNow() public static final String dateTimeNow() {
{
return dateTimeNow(YYYYMMDDHHMMSS); return dateTimeNow(YYYYMMDDHHMMSS);
} }
public static final String dateTimeNow(final String format) public static final String dateTimeNow(final String format) {
{
return parseDateToStr(format, new Date()); return parseDateToStr(format, new Date());
} }
public static final String dateTime(final Date date) public static final String dateTime(final Date date) {
{
return parseDateToStr(YYYY_MM_DD, date); return parseDateToStr(YYYY_MM_DD, date);
} }
public static final String parseDateToStr(final String format, final Date date) public static final String parseDateToStr(final String format, final Date date) {
{
return new SimpleDateFormat(format).format(date); return new SimpleDateFormat(format).format(date);
} }
public static final Date dateTime(final String format, final String ts) public static final Date dateTime(final String format, final String ts) {
{ try {
try
{
return new SimpleDateFormat(format).parse(ts); return new SimpleDateFormat(format).parse(ts);
} } catch (ParseException e) {
catch (ParseException e)
{
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
@ -88,8 +78,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
/** /**
* 日期路径 即年// 如2018/08/08 * 日期路径 即年// 如2018/08/08
*/ */
public static final String datePath() public static final String datePath() {
{
Date now = new Date(); Date now = new Date();
return DateFormatUtils.format(now, "yyyy/MM/dd"); return DateFormatUtils.format(now, "yyyy/MM/dd");
} }
@ -97,8 +86,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
/** /**
* 日期路径 即年// 如20180808 * 日期路径 即年// 如20180808
*/ */
public static final String dateTime() public static final String dateTime() {
{
Date now = new Date(); Date now = new Date();
return DateFormatUtils.format(now, "yyyyMMdd"); return DateFormatUtils.format(now, "yyyyMMdd");
} }
@ -106,18 +94,13 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
/** /**
* 日期型字符串转化为日期 格式 * 日期型字符串转化为日期 格式
*/ */
public static Date parseDate(Object str) public static Date parseDate(Object str) {
{ if (str == null) {
if (str == null)
{
return null; return null;
} }
try try {
{
return parseDate(str.toString(), parsePatterns); return parseDate(str.toString(), parsePatterns);
} } catch (ParseException e) {
catch (ParseException e)
{
return null; return null;
} }
} }
@ -125,8 +108,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
/** /**
* 获取服务器启动时间 * 获取服务器启动时间
*/ */
public static Date getServerStartDate() public static Date getServerStartDate() {
{
long time = ManagementFactory.getRuntimeMXBean().getStartTime(); long time = ManagementFactory.getRuntimeMXBean().getStartTime();
return new Date(time); return new Date(time);
} }
@ -134,8 +116,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
/** /**
* 计算两个时间差 * 计算两个时间差
*/ */
public static String getDatePoor(Date endDate, Date nowDate) public static String getDatePoor(Date endDate, Date nowDate) {
{
long nd = 1000 * 24 * 60 * 60; long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60; long nh = 1000 * 60 * 60;
long nm = 1000 * 60; long nm = 1000 * 60;

View File

@ -12,8 +12,8 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
public class DictUtils public class DictUtils {
{
/** /**
* 分隔符 * 分隔符
*/ */
@ -22,11 +22,10 @@ public class DictUtils
/** /**
* 设置字典缓存 * 设置字典缓存
* *
* @param key 参数键 * @param key 参数键
* @param dictDatas 字典数据列表 * @param dictDatas 字典数据列表
*/ */
public static void setDictCache(String key, List<SysDictData> dictDatas) public static void setDictCache(String key, List<SysDictData> dictDatas) {
{
RedisUtils.setCacheObject(getCacheKey(key), dictDatas); RedisUtils.setCacheObject(getCacheKey(key), dictDatas);
} }
@ -36,12 +35,10 @@ public class DictUtils
* @param key 参数键 * @param key 参数键
* @return dictDatas 字典数据列表 * @return dictDatas 字典数据列表
*/ */
public static List<SysDictData> getDictCache(String key) public static List<SysDictData> getDictCache(String key) {
{
Object cacheObj = RedisUtils.getCacheObject(getCacheKey(key)); Object cacheObj = RedisUtils.getCacheObject(getCacheKey(key));
if (StringUtils.isNotNull(cacheObj)) if (StringUtils.isNotNull(cacheObj)) {
{ List<SysDictData> dictDatas = (List<SysDictData>) cacheObj;
List<SysDictData> dictDatas = (List<SysDictData>)cacheObj;
return dictDatas; return dictDatas;
} }
return null; return null;
@ -50,60 +47,49 @@ public class DictUtils
/** /**
* 根据字典类型和字典值获取字典标签 * 根据字典类型和字典值获取字典标签
* *
* @param dictType 字典类型 * @param dictType 字典类型
* @param dictValue 字典值 * @param dictValue 字典值
* @return 字典标签 * @return 字典标签
*/ */
public static String getDictLabel(String dictType, String dictValue) public static String getDictLabel(String dictType, String dictValue) {
{
return getDictLabel(dictType, dictValue, SEPARATOR); return getDictLabel(dictType, dictValue, SEPARATOR);
} }
/** /**
* 根据字典类型和字典标签获取字典值 * 根据字典类型和字典标签获取字典值
* *
* @param dictType 字典类型 * @param dictType 字典类型
* @param dictLabel 字典标签 * @param dictLabel 字典标签
* @return 字典值 * @return 字典值
*/ */
public static String getDictValue(String dictType, String dictLabel) public static String getDictValue(String dictType, String dictLabel) {
{
return getDictValue(dictType, dictLabel, SEPARATOR); return getDictValue(dictType, dictLabel, SEPARATOR);
} }
/** /**
* 根据字典类型和字典值获取字典标签 * 根据字典类型和字典值获取字典标签
* *
* @param dictType 字典类型 * @param dictType 字典类型
* @param dictValue 字典值 * @param dictValue 字典值
* @param separator 分隔符 * @param separator 分隔符
* @return 字典标签 * @return 字典标签
*/ */
public static String getDictLabel(String dictType, String dictValue, String separator) public static String getDictLabel(String dictType, String dictValue, String separator) {
{
StringBuilder propertyString = new StringBuilder(); StringBuilder propertyString = new StringBuilder();
List<SysDictData> datas = getDictCache(dictType); List<SysDictData> datas = getDictCache(dictType);
if (StringUtils.containsAny(dictValue, separator) && CollUtil.isNotEmpty(datas)) if (StringUtils.containsAny(dictValue, separator) && CollUtil.isNotEmpty(datas)) {
{ for (SysDictData dict : datas) {
for (SysDictData dict : datas) for (String value : dictValue.split(separator)) {
{ if (value.equals(dict.getDictValue())) {
for (String value : dictValue.split(separator))
{
if (value.equals(dict.getDictValue()))
{
propertyString.append(dict.getDictLabel() + separator); propertyString.append(dict.getDictLabel() + separator);
break; break;
} }
} }
} }
} } else {
else for (SysDictData dict : datas) {
{ if (dictValue.equals(dict.getDictValue())) {
for (SysDictData dict : datas)
{
if (dictValue.equals(dict.getDictValue()))
{
return dict.getDictLabel(); return dict.getDictLabel();
} }
} }
@ -114,36 +100,27 @@ public class DictUtils
/** /**
* 根据字典类型和字典标签获取字典值 * 根据字典类型和字典标签获取字典值
* *
* @param dictType 字典类型 * @param dictType 字典类型
* @param dictLabel 字典标签 * @param dictLabel 字典标签
* @param separator 分隔符 * @param separator 分隔符
* @return 字典值 * @return 字典值
*/ */
public static String getDictValue(String dictType, String dictLabel, String separator) public static String getDictValue(String dictType, String dictLabel, String separator) {
{
StringBuilder propertyString = new StringBuilder(); StringBuilder propertyString = new StringBuilder();
List<SysDictData> datas = getDictCache(dictType); List<SysDictData> datas = getDictCache(dictType);
if (StringUtils.containsAny(dictLabel, separator) && CollUtil.isNotEmpty(datas)) if (StringUtils.containsAny(dictLabel, separator) && CollUtil.isNotEmpty(datas)) {
{ for (SysDictData dict : datas) {
for (SysDictData dict : datas) for (String label : dictLabel.split(separator)) {
{ if (label.equals(dict.getDictLabel())) {
for (String label : dictLabel.split(separator))
{
if (label.equals(dict.getDictLabel()))
{
propertyString.append(dict.getDictValue() + separator); propertyString.append(dict.getDictValue() + separator);
break; break;
} }
} }
} }
} } else {
else for (SysDictData dict : datas) {
{ if (dictLabel.equals(dict.getDictLabel())) {
for (SysDictData dict : datas)
{
if (dictLabel.equals(dict.getDictLabel()))
{
return dict.getDictValue(); return dict.getDictValue();
} }
} }
@ -156,16 +133,14 @@ public class DictUtils
* *
* @param key 字典键 * @param key 字典键
*/ */
public static void removeDictCache(String key) public static void removeDictCache(String key) {
{
RedisUtils.deleteObject(getCacheKey(key)); RedisUtils.deleteObject(getCacheKey(key));
} }
/** /**
* 清空字典缓存 * 清空字典缓存
*/ */
public static void clearDictCache() public static void clearDictCache() {
{
Collection<String> keys = RedisUtils.keys(Constants.SYS_DICT_KEY + "*"); Collection<String> keys = RedisUtils.keys(Constants.SYS_DICT_KEY + "*");
RedisUtils.deleteObject(keys); RedisUtils.deleteObject(keys);
} }
@ -176,8 +151,7 @@ public class DictUtils
* @param configKey 参数键 * @param configKey 参数键
* @return 缓存键key * @return 缓存键key
*/ */
public static String getCacheKey(String configKey) public static String getCacheKey(String configKey) {
{
return Constants.SYS_DICT_KEY + configKey; return Constants.SYS_DICT_KEY + configKey;
} }
} }

View File

@ -24,9 +24,9 @@ public class JsonUtils {
private static ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); private static ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class);
public static String toJsonString(Object object) { public static String toJsonString(Object object) {
if (StringUtils.isNull(object)) { if (StringUtils.isNull(object)) {
return null; return null;
} }
try { try {
return objectMapper.writeValueAsString(object); return objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
@ -57,9 +57,9 @@ public class JsonUtils {
} }
public static <T> T parseObject(String text, TypeReference<T> typeReference) { public static <T> T parseObject(String text, TypeReference<T> typeReference) {
if (StringUtils.isBlank(text)) { if (StringUtils.isBlank(text)) {
return null; return null;
} }
try { try {
return objectMapper.readValue(text, typeReference); return objectMapper.readValue(text, typeReference);
} catch (IOException e) { } catch (IOException e) {
@ -67,16 +67,17 @@ public class JsonUtils {
} }
} }
public static <T> Map<String, T> parseMap(String text) { public static <T> Map<String, T> parseMap(String text) {
if (StringUtils.isBlank(text)) { if (StringUtils.isBlank(text)) {
return null; return null;
} }
try { try {
return objectMapper.readValue(text, new TypeReference<Map<String, T>>() {}); return objectMapper.readValue(text, new TypeReference<Map<String, T>>() {
} catch (IOException e) { });
throw new RuntimeException(e); } catch (IOException e) {
} throw new RuntimeException(e);
} }
}
public static <T> List<T> parseArray(String text, Class<T> clazz) { public static <T> List<T> parseArray(String text, Class<T> clazz) {
if (StringUtils.isEmpty(text)) { if (StringUtils.isEmpty(text)) {

View File

@ -1,16 +1,15 @@
package com.ruoyi.common.utils; package com.ruoyi.common.utils;
import com.ruoyi.common.utils.spring.SpringUtils;
import org.springframework.context.MessageSource; import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
import com.ruoyi.common.utils.spring.SpringUtils;
/** /**
* 获取i18n资源文件 * 获取i18n资源文件
* *
* @author ruoyi * @author ruoyi
*/ */
public class MessageUtils public class MessageUtils {
{
/** /**
* 根据消息键和参数 获取消息 委托给spring messageSource * 根据消息键和参数 获取消息 委托给spring messageSource
* *
@ -18,8 +17,7 @@ public class MessageUtils
* @param args 参数 * @param args 参数
* @return 获取国际化翻译值 * @return 获取国际化翻译值
*/ */
public static String message(String code, Object... args) public static String message(String code, Object... args) {
{
MessageSource messageSource = SpringUtils.getBean(MessageSource.class); MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
} }

View File

@ -48,6 +48,7 @@ public class PageUtils {
/** /**
* 构建 plus 分页对象 * 构建 plus 分页对象
*
* @param <T> domain 实体 * @param <T> domain 实体
* @param <K> vo 实体 * @param <K> vo 实体
* @return 分页对象 * @return 分页对象
@ -66,12 +67,13 @@ public class PageUtils {
return page; return page;
} }
public static <T> Page<T> buildPage() { public static <T> Page<T> buildPage() {
return buildPage(null, null); return buildPage(null, null);
} }
/** /**
* 构建 MP 普通分页对象 * 构建 MP 普通分页对象
*
* @param <T> domain 实体 * @param <T> domain 实体
* @return 分页对象 * @return 分页对象
*/ */
@ -98,8 +100,8 @@ public class PageUtils {
} }
if (StringUtils.isNotBlank(orderByColumn)) { if (StringUtils.isNotBlank(orderByColumn)) {
String orderBy = SqlUtil.escapeOrderBySql(orderByColumn); String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
orderBy = StringUtils.toUnderScoreCase(orderBy); orderBy = StringUtils.toUnderScoreCase(orderBy);
if ("asc".equals(isAsc)) { if ("asc".equals(isAsc)) {
return OrderItem.asc(orderBy); return OrderItem.asc(orderBy);
} else if ("desc".equals(isAsc)) { } else if ("desc".equals(isAsc)) {
return OrderItem.desc(orderBy); return OrderItem.desc(orderBy);

View File

@ -1,30 +1,26 @@
package com.ruoyi.common.utils; package com.ruoyi.common.utils;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ServiceException;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ServiceException;
/** /**
* 安全服务工具类 * 安全服务工具类
* *
* @author ruoyi * @author ruoyi
*/ */
public class SecurityUtils public class SecurityUtils {
{
/** /**
* 用户ID * 用户ID
**/ **/
public static Long getUserId() public static Long getUserId() {
{ try {
try
{
return getLoginUser().getUserId(); return getLoginUser().getUserId();
} } catch (Exception e) {
catch (Exception e)
{
throw new ServiceException("获取用户ID异常", HttpStatus.HTTP_UNAUTHORIZED); throw new ServiceException("获取用户ID异常", HttpStatus.HTTP_UNAUTHORIZED);
} }
} }
@ -32,14 +28,10 @@ public class SecurityUtils
/** /**
* 获取部门ID * 获取部门ID
**/ **/
public static Long getDeptId() public static Long getDeptId() {
{ try {
try
{
return getLoginUser().getDeptId(); return getLoginUser().getDeptId();
} } catch (Exception e) {
catch (Exception e)
{
throw new ServiceException("获取部门ID异常", HttpStatus.HTTP_UNAUTHORIZED); throw new ServiceException("获取部门ID异常", HttpStatus.HTTP_UNAUTHORIZED);
} }
} }
@ -47,14 +39,10 @@ public class SecurityUtils
/** /**
* 获取用户账户 * 获取用户账户
**/ **/
public static String getUsername() public static String getUsername() {
{ try {
try
{
return getLoginUser().getUsername(); return getLoginUser().getUsername();
} } catch (Exception e) {
catch (Exception e)
{
throw new ServiceException("获取用户账户异常", HttpStatus.HTTP_UNAUTHORIZED); throw new ServiceException("获取用户账户异常", HttpStatus.HTTP_UNAUTHORIZED);
} }
} }
@ -62,14 +50,10 @@ public class SecurityUtils
/** /**
* 获取用户 * 获取用户
**/ **/
public static LoginUser getLoginUser() public static LoginUser getLoginUser() {
{ try {
try
{
return (LoginUser) getAuthentication().getPrincipal(); return (LoginUser) getAuthentication().getPrincipal();
} } catch (Exception e) {
catch (Exception e)
{
throw new ServiceException("获取用户信息异常", HttpStatus.HTTP_UNAUTHORIZED); throw new ServiceException("获取用户信息异常", HttpStatus.HTTP_UNAUTHORIZED);
} }
} }
@ -77,8 +61,7 @@ public class SecurityUtils
/** /**
* 获取Authentication * 获取Authentication
*/ */
public static Authentication getAuthentication() public static Authentication getAuthentication() {
{
return SecurityContextHolder.getContext().getAuthentication(); return SecurityContextHolder.getContext().getAuthentication();
} }
@ -88,8 +71,7 @@ public class SecurityUtils
* @param password 密码 * @param password 密码
* @return 加密字符串 * @return 加密字符串
*/ */
public static String encryptPassword(String password) public static String encryptPassword(String password) {
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.encode(password); return passwordEncoder.encode(password);
} }
@ -97,12 +79,11 @@ public class SecurityUtils
/** /**
* 判断密码是否相同 * 判断密码是否相同
* *
* @param rawPassword 真实密码 * @param rawPassword 真实密码
* @param encodedPassword 加密后字符 * @param encodedPassword 加密后字符
* @return 结果 * @return 结果
*/ */
public static boolean matchesPassword(String rawPassword, String encodedPassword) public static boolean matchesPassword(String rawPassword, String encodedPassword) {
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.matches(rawPassword, encodedPassword); return passwordEncoder.matches(rawPassword, encodedPassword);
} }
@ -113,8 +94,7 @@ public class SecurityUtils
* @param userId 用户ID * @param userId 用户ID
* @return 结果 * @return 结果
*/ */
public static boolean isAdmin(Long userId) public static boolean isAdmin(Long userId) {
{
return userId != null && 1L == userId; return userId != null && 1L == userId;
} }
} }

View File

@ -20,33 +20,34 @@ import java.nio.charset.StandardCharsets;
* @author ruoyi * @author ruoyi
*/ */
public class ServletUtils extends ServletUtil { public class ServletUtils extends ServletUtil {
/**
* 获取String参数
*/
public static String getParameter(String name) {
return getRequest().getParameter(name);
}
/** /**
* 获取String参数 * 获取String参数
*/ */
public static String getParameter(String name, String defaultValue) { public static String getParameter(String name) {
return Convert.toStr(getRequest().getParameter(name), defaultValue); return getRequest().getParameter(name);
} }
/** /**
* 获取Integer参数 * 获取String参数
*/ */
public static Integer getParameterToInt(String name) { public static String getParameter(String name, String defaultValue) {
return Convert.toInt(getRequest().getParameter(name)); return Convert.toStr(getRequest().getParameter(name), defaultValue);
} }
/** /**
* 获取Integer参数 * 获取Integer参数
*/ */
public static Integer getParameterToInt(String name, Integer defaultValue) { public static Integer getParameterToInt(String name) {
return Convert.toInt(getRequest().getParameter(name), defaultValue); return Convert.toInt(getRequest().getParameter(name));
} }
/**
* 获取Integer参数
*/
public static Integer getParameterToInt(String name, Integer defaultValue) {
return Convert.toInt(getRequest().getParameter(name), defaultValue);
}
/** /**
* 获取Boolean参数 * 获取Boolean参数
@ -69,75 +70,75 @@ public class ServletUtils extends ServletUtil {
return getRequestAttributes().getRequest(); return getRequestAttributes().getRequest();
} }
/** /**
* 获取response * 获取response
*/ */
public static HttpServletResponse getResponse() { public static HttpServletResponse getResponse() {
return getRequestAttributes().getResponse(); return getRequestAttributes().getResponse();
} }
/** /**
* 获取session * 获取session
*/ */
public static HttpSession getSession() { public static HttpSession getSession() {
return getRequest().getSession(); return getRequest().getSession();
} }
public static ServletRequestAttributes getRequestAttributes() { public static ServletRequestAttributes getRequestAttributes() {
RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
return (ServletRequestAttributes) attributes; return (ServletRequestAttributes) attributes;
} }
/** /**
* 将字符串渲染到客户端 * 将字符串渲染到客户端
* *
* @param response 渲染对象 * @param response 渲染对象
* @param string 待渲染的字符串 * @param string 待渲染的字符串
* @return null * @return null
*/ */
public static String renderString(HttpServletResponse response, String string) { public static String renderString(HttpServletResponse response, String string) {
try { try {
response.setStatus(HttpStatus.HTTP_OK); response.setStatus(HttpStatus.HTTP_OK);
response.setContentType(MediaType.APPLICATION_JSON_VALUE); response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.setCharacterEncoding(StandardCharsets.UTF_8.toString()); response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
response.getWriter().print(string); response.getWriter().print(string);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
/** /**
* 是否是Ajax异步请求 * 是否是Ajax异步请求
* *
* @param request * @param request
*/ */
public static boolean isAjaxRequest(HttpServletRequest request) { public static boolean isAjaxRequest(HttpServletRequest request) {
String accept = request.getHeader("accept"); String accept = request.getHeader("accept");
if (accept != null && accept.indexOf("application/json") != -1) { if (accept != null && accept.indexOf("application/json") != -1) {
return true; return true;
} }
String xRequestedWith = request.getHeader("X-Requested-With"); String xRequestedWith = request.getHeader("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) { if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) {
return true; return true;
} }
String uri = request.getRequestURI(); String uri = request.getRequestURI();
if (StringUtils.equalsAnyIgnoreCase(uri, ".json", ".xml")) { if (StringUtils.equalsAnyIgnoreCase(uri, ".json", ".xml")) {
return true; return true;
} }
String ajax = request.getParameter("__ajax"); String ajax = request.getParameter("__ajax");
if (StringUtils.equalsAnyIgnoreCase(ajax, "json", "xml")) { if (StringUtils.equalsAnyIgnoreCase(ajax, "json", "xml")) {
return true; return true;
} }
return false; return false;
} }
public static String getClientIP() { public static String getClientIP() {
return getClientIP(getRequest()); return getClientIP(getRequest());
} }
} }

View File

@ -13,7 +13,7 @@ import java.util.*;
/** /**
* 字符串工具类 * 字符串工具类
* *
* @author ruoyi * @author Lion Li
*/ */
public class StringUtils extends org.apache.commons.lang3.StringUtils { public class StringUtils extends org.apache.commons.lang3.StringUtils {

View File

@ -1,33 +1,25 @@
package com.ruoyi.common.utils; package com.ruoyi.common.utils;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.concurrent.*;
/** /**
* 线程相关工具类. * 线程相关工具类.
* *
* @author ruoyi * @author ruoyi
*/ */
public class Threads public class Threads {
{
private static final Logger logger = LoggerFactory.getLogger(Threads.class); private static final Logger logger = LoggerFactory.getLogger(Threads.class);
/** /**
* sleep等待,单位为毫秒 * sleep等待,单位为毫秒
*/ */
public static void sleep(long milliseconds) public static void sleep(long milliseconds) {
{ try {
try
{
Thread.sleep(milliseconds); Thread.sleep(milliseconds);
} } catch (InterruptedException e) {
catch (InterruptedException e)
{
return; return;
} }
} }
@ -39,24 +31,17 @@ public class Threads
* 如果仍人超時則強制退出. * 如果仍人超時則強制退出.
* 另对在shutdown时线程本身被调用中断做了处理. * 另对在shutdown时线程本身被调用中断做了处理.
*/ */
public static void shutdownAndAwaitTermination(ExecutorService pool) public static void shutdownAndAwaitTermination(ExecutorService pool) {
{ if (pool != null && !pool.isShutdown()) {
if (pool != null && !pool.isShutdown())
{
pool.shutdown(); pool.shutdown();
try try {
{ if (!pool.awaitTermination(120, TimeUnit.SECONDS)) {
if (!pool.awaitTermination(120, TimeUnit.SECONDS))
{
pool.shutdownNow(); pool.shutdownNow();
if (!pool.awaitTermination(120, TimeUnit.SECONDS)) if (!pool.awaitTermination(120, TimeUnit.SECONDS)) {
{
logger.info("Pool did not terminate"); logger.info("Pool did not terminate");
} }
} }
} } catch (InterruptedException ie) {
catch (InterruptedException ie)
{
pool.shutdownNow(); pool.shutdownNow();
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
@ -66,33 +51,22 @@ public class Threads
/** /**
* 打印线程异常信息 * 打印线程异常信息
*/ */
public static void printException(Runnable r, Throwable t) public static void printException(Runnable r, Throwable t) {
{ if (t == null && r instanceof Future<?>) {
if (t == null && r instanceof Future<?>) try {
{
try
{
Future<?> future = (Future<?>) r; Future<?> future = (Future<?>) r;
if (future.isDone()) if (future.isDone()) {
{
future.get(); future.get();
} }
} } catch (CancellationException ce) {
catch (CancellationException ce)
{
t = ce; t = ce;
} } catch (ExecutionException ee) {
catch (ExecutionException ee)
{
t = ee.getCause(); t = ee.getCause();
} } catch (InterruptedException ie) {
catch (InterruptedException ie)
{
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
} }
if (t != null) if (t != null) {
{
logger.error(t.getMessage(), t); logger.error(t.getMessage(), t);
} }
} }

View File

@ -10,20 +10,18 @@ import java.nio.charset.StandardCharsets;
/** /**
* 文件处理工具类 * 文件处理工具类
* *
* @author ruoyi * @author Lion Li
*/ */
public class FileUtils extends FileUtil public class FileUtils extends FileUtil {
{
/** /**
* 下载文件名重新编码 * 下载文件名重新编码
* *
* @param response 响应对象 * @param response 响应对象
* @param realFileName 真实文件名 * @param realFileName 真实文件名
* @return * @return
*/ */
public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException {
{
String percentEncodedFileName = percentEncode(realFileName); String percentEncodedFileName = percentEncode(realFileName);
StringBuilder contentDispositionValue = new StringBuilder(); StringBuilder contentDispositionValue = new StringBuilder();
@ -44,8 +42,7 @@ public class FileUtils extends FileUtil
* @param s 需要百分号编码的字符串 * @param s 需要百分号编码的字符串
* @return 百分号编码后的字符串 * @return 百分号编码后的字符串
*/ */
public static String percentEncode(String s) throws UnsupportedEncodingException public static String percentEncode(String s) throws UnsupportedEncodingException {
{
String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
return encode.replaceAll("\\+", "%20"); return encode.replaceAll("\\+", "%20");
} }

View File

@ -14,45 +14,45 @@ import java.util.Map;
/** /**
* 获取地址类 * 获取地址类
* *
* @author ruoyi * @author Lion Li
*/ */
@Slf4j @Slf4j
public class AddressUtils { public class AddressUtils {
// IP地址查询 // IP地址查询
public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp";
// 未知地址 // 未知地址
public static final String UNKNOWN = "XX XX"; public static final String UNKNOWN = "XX XX";
public static String getRealAddressByIP(String ip) { public static String getRealAddressByIP(String ip) {
String address = UNKNOWN; String address = UNKNOWN;
if (StringUtils.isBlank(ip)){ if (StringUtils.isBlank(ip)) {
return address; return address;
} }
// 内网不查询 // 内网不查询
ip = "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip); ip = "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip);
if (NetUtil.isInnerIP(ip)) { if (NetUtil.isInnerIP(ip)) {
return "内网IP"; return "内网IP";
} }
if (RuoYiConfig.isAddressEnabled()) { if (RuoYiConfig.isAddressEnabled()) {
try { try {
String rspStr = HttpUtil.createGet(IP_URL) String rspStr = HttpUtil.createGet(IP_URL)
.body("ip=" + ip + "&json=true", Constants.GBK) .body("ip=" + ip + "&json=true", Constants.GBK)
.execute() .execute()
.body(); .body();
if (StringUtils.isEmpty(rspStr)) { if (StringUtils.isEmpty(rspStr)) {
log.error("获取地理位置异常 {}", ip); log.error("获取地理位置异常 {}", ip);
return UNKNOWN; return UNKNOWN;
} }
Map<String, String> obj = JsonUtils.parseMap(rspStr); Map<String, String> obj = JsonUtils.parseMap(rspStr);
String region = obj.get("pro"); String region = obj.get("pro");
String city = obj.get("city"); String city = obj.get("city");
return String.format("%s %s", region, city); return String.format("%s %s", region, city);
} catch (Exception e) { } catch (Exception e) {
log.error("获取地理位置异常 {}", ip); log.error("获取地理位置异常 {}", ip);
} }
} }
return address; return address;
} }
} }

View File

@ -12,14 +12,12 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
/** /**
* Excel相关处理 * Excel相关处理
* *
* @author ruoyi * @author Lion Li
*/ */
public class ExcelUtil { public class ExcelUtil {

View File

@ -13,41 +13,41 @@ import java.lang.reflect.Method;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public class ReflectUtils extends ReflectUtil { public class ReflectUtils extends ReflectUtil {
private static final String SETTER_PREFIX = "set"; private static final String SETTER_PREFIX = "set";
private static final String GETTER_PREFIX = "get"; private static final String GETTER_PREFIX = "get";
/** /**
* 调用Getter方法. * 调用Getter方法.
* 支持多级对象名.对象名.方法 * 支持多级对象名.对象名.方法
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <E> E invokeGetter(Object obj, String propertyName) { public static <E> E invokeGetter(Object obj, String propertyName) {
Object object = obj; Object object = obj;
for (String name : StringUtils.split(propertyName, ".")) { for (String name : StringUtils.split(propertyName, ".")) {
String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name);
object = invoke(object, getterMethodName); object = invoke(object, getterMethodName);
} }
return (E) object; return (E) object;
} }
/** /**
* 调用Setter方法, 仅匹配方法名 * 调用Setter方法, 仅匹配方法名
* 支持多级对象名.对象名.方法 * 支持多级对象名.对象名.方法
*/ */
public static <E> void invokeSetter(Object obj, String propertyName, E value) { public static <E> void invokeSetter(Object obj, String propertyName, E value) {
Object object = obj; Object object = obj;
String[] names = StringUtils.split(propertyName, "."); String[] names = StringUtils.split(propertyName, ".");
for (int i = 0; i < names.length; i++) { for (int i = 0; i < names.length; i++) {
if (i < names.length - 1) { if (i < names.length - 1) {
String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]);
object = invoke(object, getterMethodName); object = invoke(object, getterMethodName);
} else { } else {
String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]);
Method method = getMethodByName(object.getClass(), setterMethodName); Method method = getMethodByName(object.getClass(), setterMethodName);
invoke(object, method, value); invoke(object, method, value);
} }
} }
} }
} }

View File

@ -13,53 +13,53 @@ import org.springframework.stereotype.Component;
@Component @Component
public final class SpringUtils extends SpringUtil { public final class SpringUtils extends SpringUtil {
/** /**
* 如果BeanFactory包含一个与所给名称匹配的bean定义则返回true * 如果BeanFactory包含一个与所给名称匹配的bean定义则返回true
* *
* @param name * @param name
* @return boolean * @return boolean
*/ */
public static boolean containsBean(String name) { public static boolean containsBean(String name) {
return getBeanFactory().containsBean(name); return getBeanFactory().containsBean(name);
} }
/** /**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype * 判断以给定名字注册的bean定义是一个singleton还是一个prototype
* 如果与给定名字相应的bean定义没有被找到将会抛出一个异常NoSuchBeanDefinitionException * 如果与给定名字相应的bean定义没有被找到将会抛出一个异常NoSuchBeanDefinitionException
* *
* @param name * @param name
* @return boolean * @return boolean
*/ */
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().isSingleton(name); return getBeanFactory().isSingleton(name);
} }
/** /**
* @param name * @param name
* @return Class 注册对象的类型 * @return Class 注册对象的类型
*/ */
public static Class<?> getType(String name) throws NoSuchBeanDefinitionException { public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().getType(name); return getBeanFactory().getType(name);
} }
/** /**
* 如果给定的bean名字在bean定义中有别名则返回这些别名 * 如果给定的bean名字在bean定义中有别名则返回这些别名
* *
* @param name * @param name
*/ */
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().getAliases(name); return getBeanFactory().getAliases(name);
} }
/** /**
* 获取aop代理对象 * 获取aop代理对象
* *
* @param invoker * @param invoker
* @return * @return
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <T> T getAopProxy(T invoker) { public static <T> T getAopProxy(T invoker) {
return (T) AopContext.currentProxy(); return (T) AopContext.currentProxy();
} }
} }

View File

@ -8,8 +8,7 @@ import com.ruoyi.common.utils.StringUtils;
* *
* @author ruoyi * @author ruoyi
*/ */
public class SqlUtil public class SqlUtil {
{
/** /**
* 仅支持字母数字下划线空格逗号小数点支持多个字段排序 * 仅支持字母数字下划线空格逗号小数点支持多个字段排序
*/ */
@ -18,10 +17,8 @@ public class SqlUtil
/** /**
* 检查字符防止注入绕过 * 检查字符防止注入绕过
*/ */
public static String escapeOrderBySql(String value) public static String escapeOrderBySql(String value) {
{ if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) {
if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
{
throw new UtilException("参数不符合规范,不能进行查询"); throw new UtilException("参数不符合规范,不能进行查询");
} }
return value; return value;
@ -30,8 +27,7 @@ public class SqlUtil
/** /**
* 验证 order by 语法是否符合规范 * 验证 order by 语法是否符合规范
*/ */
public static boolean isValidOrderBySql(String value) public static boolean isValidOrderBySql(String value) {
{
return value.matches(SQL_PATTERN); return value.matches(SQL_PATTERN);
} }
} }

View File

@ -23,15 +23,14 @@ import java.io.IOException;
* @author ruoyi * @author ruoyi
*/ */
@Component @Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
{
@Autowired @Autowired
private TokenService tokenService; private TokenService tokenService;
@Override @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException throws ServletException, IOException {
{
LoginUser loginUser = tokenService.getLoginUser(request); LoginUser loginUser = tokenService.getLoginUser(request);
if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) { if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) {
tokenService.verifyToken(loginUser); tokenService.verifyToken(loginUser);

View File

@ -1,10 +1,10 @@
package com.ruoyi.framework.security.handle; package com.ruoyi.framework.security.handle;
import com.ruoyi.common.utils.StringUtils;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -20,14 +20,12 @@ import java.io.Serializable;
* @author ruoyi * @author ruoyi
*/ */
@Component @Component
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable {
{
private static final long serialVersionUID = -8970718410437077606L; private static final long serialVersionUID = -8970718410437077606L;
@Override @Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e)
throws IOException throws IOException {
{
int code = HttpStatus.HTTP_UNAUTHORIZED; int code = HttpStatus.HTTP_UNAUTHORIZED;
String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI()); String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI());
ServletUtils.renderString(response, JsonUtils.toJsonString(AjaxResult.error(code, msg))); ServletUtils.renderString(response, JsonUtils.toJsonString(AjaxResult.error(code, msg)));

View File

@ -5,8 +5,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.DemoModeException; import com.ruoyi.common.exception.DemoModeException;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import org.slf4j.Logger; import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.HttpRequestMethodNotSupportedException;
@ -20,19 +19,17 @@ import javax.validation.ConstraintViolationException;
/** /**
* 全局异常处理器 * 全局异常处理器
* *
* @author ruoyi * @author Lion Li
*/ */
@Slf4j
@RestControllerAdvice @RestControllerAdvice
public class GlobalExceptionHandler public class GlobalExceptionHandler {
{
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/** /**
* 权限校验异常 * 权限校验异常
*/ */
@ExceptionHandler(AccessDeniedException.class) @ExceptionHandler(AccessDeniedException.class)
public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request) public AjaxResult<Void> handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request) {
{
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage()); log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage());
return AjaxResult.error(HttpStatus.HTTP_FORBIDDEN, "没有权限,请联系管理员授权"); return AjaxResult.error(HttpStatus.HTTP_FORBIDDEN, "没有权限,请联系管理员授权");
@ -42,9 +39,8 @@ public class GlobalExceptionHandler
* 请求方式不支持 * 请求方式不支持
*/ */
@ExceptionHandler(HttpRequestMethodNotSupportedException.class) @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, public AjaxResult<Void> handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
HttpServletRequest request) HttpServletRequest request) {
{
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
@ -54,8 +50,7 @@ public class GlobalExceptionHandler
* 业务异常 * 业务异常
*/ */
@ExceptionHandler(ServiceException.class) @ExceptionHandler(ServiceException.class)
public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) public AjaxResult<Void> handleServiceException(ServiceException e, HttpServletRequest request) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
Integer code = e.getCode(); Integer code = e.getCode();
return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
@ -65,8 +60,7 @@ public class GlobalExceptionHandler
* 拦截未知的运行时异常 * 拦截未知的运行时异常
*/ */
@ExceptionHandler(RuntimeException.class) @ExceptionHandler(RuntimeException.class)
public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) public AjaxResult<Void> handleRuntimeException(RuntimeException e, HttpServletRequest request) {
{
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生未知异常.", requestURI, e); log.error("请求地址'{}',发生未知异常.", requestURI, e);
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
@ -76,8 +70,7 @@ public class GlobalExceptionHandler
* 系统异常 * 系统异常
*/ */
@ExceptionHandler(Exception.class) @ExceptionHandler(Exception.class)
public AjaxResult handleException(Exception e, HttpServletRequest request) public AjaxResult<Void> handleException(Exception e, HttpServletRequest request) {
{
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生系统异常.", requestURI, e); log.error("请求地址'{}',发生系统异常.", requestURI, e);
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
@ -87,8 +80,7 @@ public class GlobalExceptionHandler
* 自定义验证异常 * 自定义验证异常
*/ */
@ExceptionHandler(BindException.class) @ExceptionHandler(BindException.class)
public AjaxResult handleBindException(BindException e) public AjaxResult<Void> handleBindException(BindException e) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
String message = e.getAllErrors().get(0).getDefaultMessage(); String message = e.getAllErrors().get(0).getDefaultMessage();
return AjaxResult.error(message); return AjaxResult.error(message);
@ -98,7 +90,7 @@ public class GlobalExceptionHandler
* 自定义验证异常 * 自定义验证异常
*/ */
@ExceptionHandler(ConstraintViolationException.class) @ExceptionHandler(ConstraintViolationException.class)
public AjaxResult constraintViolationException(ConstraintViolationException e) { public AjaxResult<Void> constraintViolationException(ConstraintViolationException e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
String message = e.getConstraintViolations().iterator().next().getMessage(); String message = e.getConstraintViolations().iterator().next().getMessage();
return AjaxResult.error(message); return AjaxResult.error(message);
@ -108,8 +100,7 @@ public class GlobalExceptionHandler
* 自定义验证异常 * 自定义验证异常
*/ */
@ExceptionHandler(MethodArgumentNotValidException.class) @ExceptionHandler(MethodArgumentNotValidException.class)
public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) public AjaxResult<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
{
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
String message = e.getBindingResult().getFieldError().getDefaultMessage(); String message = e.getBindingResult().getFieldError().getDefaultMessage();
return AjaxResult.error(message); return AjaxResult.error(message);
@ -119,8 +110,7 @@ public class GlobalExceptionHandler
* 演示模式异常 * 演示模式异常
*/ */
@ExceptionHandler(DemoModeException.class) @ExceptionHandler(DemoModeException.class)
public AjaxResult handleDemoModeException(DemoModeException e) public AjaxResult<Void> handleDemoModeException(DemoModeException e) {
{
return AjaxResult.error("演示模式,不允许操作"); return AjaxResult.error("演示模式,不允许操作");
} }
} }