作者 钟来

集成权限模块

正在显示 52 个修改的文件 包含 4571 行增加25 行删除
... ... @@ -18,6 +18,8 @@ public class BaseEntity
private String orderBy; //排序(如:"id desc,name asc")
private String remark; //备注
public Map<String, Object[]> getTimeMap() {
return timeMap;
}
... ... @@ -50,4 +52,12 @@ public class BaseEntity
public void setParams(Map<String, QueryType> params) {
this.params = params;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 参数配置表对象 sys_config
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("参数配置表")
public class SysConfig extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 参数主键 */
@ApiModelProperty("参数主键")
private Integer config_id;
/** 参数名称 */
@ApiModelProperty("参数名称")
private String config_name;
/** 参数键名 */
@ApiModelProperty("参数键名")
private String config_key;
/** 参数键值 */
@ApiModelProperty("参数键值")
private String config_value;
/** 系统内置(Y是 N否) */
@ApiModelProperty("系统内置(Y是 N否)")
private String config_type;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setConfig_id(Integer config_id)
{
this.config_id = config_id;
}
public Integer getConfig_id()
{
return config_id;
}
public void setConfig_name(String config_name)
{
this.config_name = config_name;
}
public String getConfig_name()
{
return config_name;
}
public void setConfig_key(String config_key)
{
this.config_key = config_key;
}
public String getConfig_key()
{
return config_key;
}
public void setConfig_value(String config_value)
{
this.config_value = config_value;
}
public String getConfig_value()
{
return config_value;
}
public void setConfig_type(String config_type)
{
this.config_type = config_type;
}
public String getConfig_type()
{
return config_type;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("config_id", getConfig_id())
.append("config_name", getConfig_name())
.append("config_key", getConfig_key())
.append("config_value", getConfig_value())
.append("config_type", getConfig_type())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 部门表对象 sys_dept
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("部门表")
public class SysDept extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 部门id */
@ApiModelProperty("部门id")
private java.math.BigInteger dept_id;
/** 父部门id */
@ApiModelProperty("父部门id")
private java.math.BigInteger parent_id;
/** 祖级列表 */
@ApiModelProperty("祖级列表")
private String ancestors;
/** 部门名称 */
@ApiModelProperty("部门名称")
private String dept_name;
/** 显示顺序 */
@ApiModelProperty("显示顺序")
private Integer order_num;
/** 负责人 */
@ApiModelProperty("负责人")
private String leader;
/** 联系电话 */
@ApiModelProperty("联系电话")
private String phone;
/** 邮箱 */
@ApiModelProperty("邮箱")
private String email;
/** 部门状态(0正常 1停用) */
@ApiModelProperty("部门状态(0正常 1停用)")
private String status;
/** 删除标志(0代表存在 2代表删除) */
@ApiModelProperty("删除标志(0代表存在 2代表删除)")
private String del_flag;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setDept_id(java.math.BigInteger dept_id)
{
this.dept_id = dept_id;
}
public java.math.BigInteger getDept_id()
{
return dept_id;
}
public void setParent_id(java.math.BigInteger parent_id)
{
this.parent_id = parent_id;
}
public java.math.BigInteger getParent_id()
{
return parent_id;
}
public void setAncestors(String ancestors)
{
this.ancestors = ancestors;
}
public String getAncestors()
{
return ancestors;
}
public void setDept_name(String dept_name)
{
this.dept_name = dept_name;
}
public String getDept_name()
{
return dept_name;
}
public void setOrder_num(Integer order_num)
{
this.order_num = order_num;
}
public Integer getOrder_num()
{
return order_num;
}
public void setLeader(String leader)
{
this.leader = leader;
}
public String getLeader()
{
return leader;
}
public void setPhone(String phone)
{
this.phone = phone;
}
public String getPhone()
{
return phone;
}
public void setEmail(String email)
{
this.email = email;
}
public String getEmail()
{
return email;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setDel_flag(String del_flag)
{
this.del_flag = del_flag;
}
public String getDel_flag()
{
return del_flag;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("dept_id", getDept_id())
.append("parent_id", getParent_id())
.append("ancestors", getAncestors())
.append("dept_name", getDept_name())
.append("order_num", getOrder_num())
.append("leader", getLeader())
.append("phone", getPhone())
.append("email", getEmail())
.append("status", getStatus())
.append("del_flag", getDel_flag())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 字典数据表对象 sys_dict_data
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("字典数据表")
public class SysDictData extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 字典编码 */
@ApiModelProperty("字典编码")
private java.math.BigInteger dict_code;
/** 字典排序 */
@ApiModelProperty("字典排序")
private Integer dict_sort;
/** 字典标签 */
@ApiModelProperty("字典标签")
private String dict_label;
/** 字典键值 */
@ApiModelProperty("字典键值")
private String dict_value;
/** 字典类型 */
@ApiModelProperty("字典类型")
private String dict_type;
/** 样式属性(其他样式扩展) */
@ApiModelProperty("样式属性(其他样式扩展)")
private String css_class;
/** 表格回显样式 */
@ApiModelProperty("表格回显样式")
private String list_class;
/** 是否默认(Y是 N否) */
@ApiModelProperty("是否默认(Y是 N否)")
private String is_default;
/** 状态(0正常 1停用) */
@ApiModelProperty("状态(0正常 1停用)")
private String status;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setDict_code(java.math.BigInteger dict_code)
{
this.dict_code = dict_code;
}
public java.math.BigInteger getDict_code()
{
return dict_code;
}
public void setDict_sort(Integer dict_sort)
{
this.dict_sort = dict_sort;
}
public Integer getDict_sort()
{
return dict_sort;
}
public void setDict_label(String dict_label)
{
this.dict_label = dict_label;
}
public String getDict_label()
{
return dict_label;
}
public void setDict_value(String dict_value)
{
this.dict_value = dict_value;
}
public String getDict_value()
{
return dict_value;
}
public void setDict_type(String dict_type)
{
this.dict_type = dict_type;
}
public String getDict_type()
{
return dict_type;
}
public void setCss_class(String css_class)
{
this.css_class = css_class;
}
public String getCss_class()
{
return css_class;
}
public void setList_class(String list_class)
{
this.list_class = list_class;
}
public String getList_class()
{
return list_class;
}
public void setIs_default(String is_default)
{
this.is_default = is_default;
}
public String getIs_default()
{
return is_default;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("dict_code", getDict_code())
.append("dict_sort", getDict_sort())
.append("dict_label", getDict_label())
.append("dict_value", getDict_value())
.append("dict_type", getDict_type())
.append("css_class", getCss_class())
.append("list_class", getList_class())
.append("is_default", getIs_default())
.append("status", getStatus())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 字典类型表对象 sys_dict_type
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("字典类型表")
public class SysDictType extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 字典主键 */
@ApiModelProperty("字典主键")
private java.math.BigInteger dict_id;
/** 字典名称 */
@ApiModelProperty("字典名称")
private String dict_name;
/** 字典类型 */
@ApiModelProperty("字典类型")
private String dict_type;
/** 状态(0正常 1停用) */
@ApiModelProperty("状态(0正常 1停用)")
private String status;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setDict_id(java.math.BigInteger dict_id)
{
this.dict_id = dict_id;
}
public java.math.BigInteger getDict_id()
{
return dict_id;
}
public void setDict_name(String dict_name)
{
this.dict_name = dict_name;
}
public String getDict_name()
{
return dict_name;
}
public void setDict_type(String dict_type)
{
this.dict_type = dict_type;
}
public String getDict_type()
{
return dict_type;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("dict_id", getDict_id())
.append("dict_name", getDict_name())
.append("dict_type", getDict_type())
.append("status", getStatus())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 定时任务调度表对象 sys_job
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("定时任务调度表")
public class SysJob extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 任务ID */
@ApiModelProperty("任务ID")
private java.math.BigInteger job_id;
/** 任务名称 */
@ApiModelProperty("任务名称")
private String job_name;
/** 任务组名 */
@ApiModelProperty("任务组名")
private String job_group;
/** 调用目标字符串 */
@ApiModelProperty("调用目标字符串")
private String invoke_target;
/** cron执行表达式 */
@ApiModelProperty("cron执行表达式")
private String cron_expression;
/** 计划执行错误策略(1立即执行 2执行一次 3放弃执行) */
@ApiModelProperty("计划执行错误策略(1立即执行 2执行一次 3放弃执行)")
private String misfire_policy;
/** 是否并发执行(0允许 1禁止) */
@ApiModelProperty("是否并发执行(0允许 1禁止)")
private String concurrent;
/** 状态(0正常 1暂停) */
@ApiModelProperty("状态(0正常 1暂停)")
private String status;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setJob_id(java.math.BigInteger job_id)
{
this.job_id = job_id;
}
public java.math.BigInteger getJob_id()
{
return job_id;
}
public void setJob_name(String job_name)
{
this.job_name = job_name;
}
public String getJob_name()
{
return job_name;
}
public void setJob_group(String job_group)
{
this.job_group = job_group;
}
public String getJob_group()
{
return job_group;
}
public void setInvoke_target(String invoke_target)
{
this.invoke_target = invoke_target;
}
public String getInvoke_target()
{
return invoke_target;
}
public void setCron_expression(String cron_expression)
{
this.cron_expression = cron_expression;
}
public String getCron_expression()
{
return cron_expression;
}
public void setMisfire_policy(String misfire_policy)
{
this.misfire_policy = misfire_policy;
}
public String getMisfire_policy()
{
return misfire_policy;
}
public void setConcurrent(String concurrent)
{
this.concurrent = concurrent;
}
public String getConcurrent()
{
return concurrent;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("job_id", getJob_id())
.append("job_name", getJob_name())
.append("job_group", getJob_group())
.append("invoke_target", getInvoke_target())
.append("cron_expression", getCron_expression())
.append("misfire_policy", getMisfire_policy())
.append("concurrent", getConcurrent())
.append("status", getStatus())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 定时任务调度日志表对象 sys_job_log
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("定时任务调度日志表")
public class SysJobLog extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 任务日志ID */
@ApiModelProperty("任务日志ID")
private java.math.BigInteger job_log_id;
/** 任务名称 */
@ApiModelProperty("任务名称")
private String job_name;
/** 任务组名 */
@ApiModelProperty("任务组名")
private String job_group;
/** 调用目标字符串 */
@ApiModelProperty("调用目标字符串")
private String invoke_target;
/** 日志信息 */
@ApiModelProperty("日志信息")
private String job_message;
/** 执行状态(0正常 1失败) */
@ApiModelProperty("执行状态(0正常 1失败)")
private String status;
/** 异常信息 */
@ApiModelProperty("异常信息")
private String exception_info;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
public void setJob_log_id(java.math.BigInteger job_log_id)
{
this.job_log_id = job_log_id;
}
public java.math.BigInteger getJob_log_id()
{
return job_log_id;
}
public void setJob_name(String job_name)
{
this.job_name = job_name;
}
public String getJob_name()
{
return job_name;
}
public void setJob_group(String job_group)
{
this.job_group = job_group;
}
public String getJob_group()
{
return job_group;
}
public void setInvoke_target(String invoke_target)
{
this.invoke_target = invoke_target;
}
public String getInvoke_target()
{
return invoke_target;
}
public void setJob_message(String job_message)
{
this.job_message = job_message;
}
public String getJob_message()
{
return job_message;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setException_info(String exception_info)
{
this.exception_info = exception_info;
}
public String getException_info()
{
return exception_info;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("job_log_id", getJob_log_id())
.append("job_name", getJob_name())
.append("job_group", getJob_group())
.append("invoke_target", getInvoke_target())
.append("job_message", getJob_message())
.append("status", getStatus())
.append("exception_info", getException_info())
.append("create_time", getCreate_time())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 系统访问记录对象 sys_logininfor
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("系统访问记录")
public class SysLogininfor extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 访问ID */
@ApiModelProperty("访问ID")
private java.math.BigInteger info_id;
/** 用户账号 */
@ApiModelProperty("用户账号")
private String user_name;
/** 登录IP地址 */
@ApiModelProperty("登录IP地址")
private String ipaddr;
/** 登录地点 */
@ApiModelProperty("登录地点")
private String login_location;
/** 浏览器类型 */
@ApiModelProperty("浏览器类型")
private String browser;
/** 操作系统 */
@ApiModelProperty("操作系统")
private String os;
/** 登录状态(0成功 1失败) */
@ApiModelProperty("登录状态(0成功 1失败)")
private String status;
/** 提示消息 */
@ApiModelProperty("提示消息")
private String msg;
/** 访问时间 */
@ApiModelProperty("访问时间")
private java.util.Date login_time;
public void setInfo_id(java.math.BigInteger info_id)
{
this.info_id = info_id;
}
public java.math.BigInteger getInfo_id()
{
return info_id;
}
public void setUser_name(String user_name)
{
this.user_name = user_name;
}
public String getUser_name()
{
return user_name;
}
public void setIpaddr(String ipaddr)
{
this.ipaddr = ipaddr;
}
public String getIpaddr()
{
return ipaddr;
}
public void setLogin_location(String login_location)
{
this.login_location = login_location;
}
public String getLogin_location()
{
return login_location;
}
public void setBrowser(String browser)
{
this.browser = browser;
}
public String getBrowser()
{
return browser;
}
public void setOs(String os)
{
this.os = os;
}
public String getOs()
{
return os;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setMsg(String msg)
{
this.msg = msg;
}
public String getMsg()
{
return msg;
}
public void setLogin_time(java.util.Date login_time)
{
this.login_time = login_time;
}
public java.util.Date getLogin_time()
{
return login_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("info_id", getInfo_id())
.append("user_name", getUser_name())
.append("ipaddr", getIpaddr())
.append("login_location", getLogin_location())
.append("browser", getBrowser())
.append("os", getOs())
.append("status", getStatus())
.append("msg", getMsg())
.append("login_time", getLogin_time())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 菜单权限表对象 sys_menu
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("菜单权限表")
public class SysMenu extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 菜单ID */
@ApiModelProperty("菜单ID")
private java.math.BigInteger menu_id;
/** 菜单名称 */
@ApiModelProperty("菜单名称")
private String menu_name;
/** 父菜单ID */
@ApiModelProperty("父菜单ID")
private java.math.BigInteger parent_id;
/** 显示顺序 */
@ApiModelProperty("显示顺序")
private Integer order_num;
/** 路由地址 */
@ApiModelProperty("路由地址")
private String path;
/** 组件路径 */
@ApiModelProperty("组件路径")
private String component;
/** 路由参数 */
@ApiModelProperty("路由参数")
private String query;
/** 是否为外链(0是 1否) */
@ApiModelProperty("是否为外链(0是 1否)")
private Integer is_frame;
/** 是否缓存(0缓存 1不缓存) */
@ApiModelProperty("是否缓存(0缓存 1不缓存)")
private Integer is_cache;
/** 菜单类型(M目录 C菜单 F按钮) */
@ApiModelProperty("菜单类型(M目录 C菜单 F按钮)")
private String menu_type;
/** 菜单状态(0显示 1隐藏) */
@ApiModelProperty("菜单状态(0显示 1隐藏)")
private String visible;
/** 菜单状态(0正常 1停用) */
@ApiModelProperty("菜单状态(0正常 1停用)")
private String status;
/** 权限标识 */
@ApiModelProperty("权限标识")
private String perms;
/** 菜单图标 */
@ApiModelProperty("菜单图标")
private String icon;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setMenu_id(java.math.BigInteger menu_id)
{
this.menu_id = menu_id;
}
public java.math.BigInteger getMenu_id()
{
return menu_id;
}
public void setMenu_name(String menu_name)
{
this.menu_name = menu_name;
}
public String getMenu_name()
{
return menu_name;
}
public void setParent_id(java.math.BigInteger parent_id)
{
this.parent_id = parent_id;
}
public java.math.BigInteger getParent_id()
{
return parent_id;
}
public void setOrder_num(Integer order_num)
{
this.order_num = order_num;
}
public Integer getOrder_num()
{
return order_num;
}
public void setPath(String path)
{
this.path = path;
}
public String getPath()
{
return path;
}
public void setComponent(String component)
{
this.component = component;
}
public String getComponent()
{
return component;
}
public void setQuery(String query)
{
this.query = query;
}
public String getQuery()
{
return query;
}
public void setIs_frame(Integer is_frame)
{
this.is_frame = is_frame;
}
public Integer getIs_frame()
{
return is_frame;
}
public void setIs_cache(Integer is_cache)
{
this.is_cache = is_cache;
}
public Integer getIs_cache()
{
return is_cache;
}
public void setMenu_type(String menu_type)
{
this.menu_type = menu_type;
}
public String getMenu_type()
{
return menu_type;
}
public void setVisible(String visible)
{
this.visible = visible;
}
public String getVisible()
{
return visible;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setPerms(String perms)
{
this.perms = perms;
}
public String getPerms()
{
return perms;
}
public void setIcon(String icon)
{
this.icon = icon;
}
public String getIcon()
{
return icon;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("menu_id", getMenu_id())
.append("menu_name", getMenu_name())
.append("parent_id", getParent_id())
.append("order_num", getOrder_num())
.append("path", getPath())
.append("component", getComponent())
.append("query", getQuery())
.append("is_frame", getIs_frame())
.append("is_cache", getIs_cache())
.append("menu_type", getMenu_type())
.append("visible", getVisible())
.append("status", getStatus())
.append("perms", getPerms())
.append("icon", getIcon())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 通知公告表对象 sys_notice
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("通知公告表")
public class SysNotice extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 公告ID */
@ApiModelProperty("公告ID")
private Integer notice_id;
/** 公告标题 */
@ApiModelProperty("公告标题")
private String notice_title;
/** 公告类型(1通知 2公告) */
@ApiModelProperty("公告类型(1通知 2公告)")
private String notice_type;
/** 公告内容 */
@ApiModelProperty("公告内容")
private String notice_content;
/** 公告状态(0正常 1关闭) */
@ApiModelProperty("公告状态(0正常 1关闭)")
private String status;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setNotice_id(Integer notice_id)
{
this.notice_id = notice_id;
}
public Integer getNotice_id()
{
return notice_id;
}
public void setNotice_title(String notice_title)
{
this.notice_title = notice_title;
}
public String getNotice_title()
{
return notice_title;
}
public void setNotice_type(String notice_type)
{
this.notice_type = notice_type;
}
public String getNotice_type()
{
return notice_type;
}
public void setNotice_content(String notice_content)
{
this.notice_content = notice_content;
}
public String getNotice_content()
{
return notice_content;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("notice_id", getNotice_id())
.append("notice_title", getNotice_title())
.append("notice_type", getNotice_type())
.append("notice_content", getNotice_content())
.append("status", getStatus())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 操作日志记录对象 sys_oper_log
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("操作日志记录")
public class SysOperLog extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 日志主键 */
@ApiModelProperty("日志主键")
private java.math.BigInteger oper_id;
/** 模块标题 */
@ApiModelProperty("模块标题")
private String title;
/** 业务类型(0其它 1新增 2修改 3删除) */
@ApiModelProperty("业务类型(0其它 1新增 2修改 3删除)")
private Integer business_type;
/** 方法名称 */
@ApiModelProperty("方法名称")
private String method;
/** 请求方式 */
@ApiModelProperty("请求方式")
private String request_method;
/** 操作类别(0其它 1后台用户 2手机端用户) */
@ApiModelProperty("操作类别(0其它 1后台用户 2手机端用户)")
private Integer operator_type;
/** 操作人员 */
@ApiModelProperty("操作人员")
private String oper_name;
/** 部门名称 */
@ApiModelProperty("部门名称")
private String dept_name;
/** 请求URL */
@ApiModelProperty("请求URL")
private String oper_url;
/** 主机地址 */
@ApiModelProperty("主机地址")
private String oper_ip;
/** 操作地点 */
@ApiModelProperty("操作地点")
private String oper_location;
/** 请求参数 */
@ApiModelProperty("请求参数")
private String oper_param;
/** 返回参数 */
@ApiModelProperty("返回参数")
private String json_result;
/** 操作状态(0正常 1异常) */
@ApiModelProperty("操作状态(0正常 1异常)")
private Integer status;
/** 错误消息 */
@ApiModelProperty("错误消息")
private String error_msg;
/** 操作时间 */
@ApiModelProperty("操作时间")
private java.util.Date oper_time;
/** 消耗时间 */
@ApiModelProperty("消耗时间")
private java.math.BigInteger cost_time;
public void setOper_id(java.math.BigInteger oper_id)
{
this.oper_id = oper_id;
}
public java.math.BigInteger getOper_id()
{
return oper_id;
}
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
public void setBusiness_type(Integer business_type)
{
this.business_type = business_type;
}
public Integer getBusiness_type()
{
return business_type;
}
public void setMethod(String method)
{
this.method = method;
}
public String getMethod()
{
return method;
}
public void setRequest_method(String request_method)
{
this.request_method = request_method;
}
public String getRequest_method()
{
return request_method;
}
public void setOperator_type(Integer operator_type)
{
this.operator_type = operator_type;
}
public Integer getOperator_type()
{
return operator_type;
}
public void setOper_name(String oper_name)
{
this.oper_name = oper_name;
}
public String getOper_name()
{
return oper_name;
}
public void setDept_name(String dept_name)
{
this.dept_name = dept_name;
}
public String getDept_name()
{
return dept_name;
}
public void setOper_url(String oper_url)
{
this.oper_url = oper_url;
}
public String getOper_url()
{
return oper_url;
}
public void setOper_ip(String oper_ip)
{
this.oper_ip = oper_ip;
}
public String getOper_ip()
{
return oper_ip;
}
public void setOper_location(String oper_location)
{
this.oper_location = oper_location;
}
public String getOper_location()
{
return oper_location;
}
public void setOper_param(String oper_param)
{
this.oper_param = oper_param;
}
public String getOper_param()
{
return oper_param;
}
public void setJson_result(String json_result)
{
this.json_result = json_result;
}
public String getJson_result()
{
return json_result;
}
public void setStatus(Integer status)
{
this.status = status;
}
public Integer getStatus()
{
return status;
}
public void setError_msg(String error_msg)
{
this.error_msg = error_msg;
}
public String getError_msg()
{
return error_msg;
}
public void setOper_time(java.util.Date oper_time)
{
this.oper_time = oper_time;
}
public java.util.Date getOper_time()
{
return oper_time;
}
public void setCost_time(java.math.BigInteger cost_time)
{
this.cost_time = cost_time;
}
public java.math.BigInteger getCost_time()
{
return cost_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("oper_id", getOper_id())
.append("title", getTitle())
.append("business_type", getBusiness_type())
.append("method", getMethod())
.append("request_method", getRequest_method())
.append("operator_type", getOperator_type())
.append("oper_name", getOper_name())
.append("dept_name", getDept_name())
.append("oper_url", getOper_url())
.append("oper_ip", getOper_ip())
.append("oper_location", getOper_location())
.append("oper_param", getOper_param())
.append("json_result", getJson_result())
.append("status", getStatus())
.append("error_msg", getError_msg())
.append("oper_time", getOper_time())
.append("cost_time", getCost_time())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 岗位信息表对象 sys_post
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("岗位信息表")
public class SysPost extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 岗位ID */
@ApiModelProperty("岗位ID")
private java.math.BigInteger post_id;
/** 岗位编码 */
@ApiModelProperty("岗位编码")
private String post_code;
/** 岗位名称 */
@ApiModelProperty("岗位名称")
private String post_name;
/** 显示顺序 */
@ApiModelProperty("显示顺序")
private Integer post_sort;
/** 状态(0正常 1停用) */
@ApiModelProperty("状态(0正常 1停用)")
private String status;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setPost_id(java.math.BigInteger post_id)
{
this.post_id = post_id;
}
public java.math.BigInteger getPost_id()
{
return post_id;
}
public void setPost_code(String post_code)
{
this.post_code = post_code;
}
public String getPost_code()
{
return post_code;
}
public void setPost_name(String post_name)
{
this.post_name = post_name;
}
public String getPost_name()
{
return post_name;
}
public void setPost_sort(Integer post_sort)
{
this.post_sort = post_sort;
}
public Integer getPost_sort()
{
return post_sort;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("post_id", getPost_id())
.append("post_code", getPost_code())
.append("post_name", getPost_name())
.append("post_sort", getPost_sort())
.append("status", getStatus())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 角色信息表对象 sys_role
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("角色信息表")
public class SysRole extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 角色ID */
@ApiModelProperty("角色ID")
private java.math.BigInteger role_id;
/** 角色名称 */
@ApiModelProperty("角色名称")
private String role_name;
/** 角色权限字符串 */
@ApiModelProperty("角色权限字符串")
private String role_key;
/** 显示顺序 */
@ApiModelProperty("显示顺序")
private Integer role_sort;
/** 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限) */
@ApiModelProperty("数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)")
private String data_scope;
/** 菜单树选择项是否关联显示 */
@ApiModelProperty("菜单树选择项是否关联显示")
private Integer menu_check_strictly;
/** 部门树选择项是否关联显示 */
@ApiModelProperty("部门树选择项是否关联显示")
private Integer dept_check_strictly;
/** 角色状态(0正常 1停用) */
@ApiModelProperty("角色状态(0正常 1停用)")
private String status;
/** 删除标志(0代表存在 2代表删除) */
@ApiModelProperty("删除标志(0代表存在 2代表删除)")
private String del_flag;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setRole_id(java.math.BigInteger role_id)
{
this.role_id = role_id;
}
public java.math.BigInteger getRole_id()
{
return role_id;
}
public void setRole_name(String role_name)
{
this.role_name = role_name;
}
public String getRole_name()
{
return role_name;
}
public void setRole_key(String role_key)
{
this.role_key = role_key;
}
public String getRole_key()
{
return role_key;
}
public void setRole_sort(Integer role_sort)
{
this.role_sort = role_sort;
}
public Integer getRole_sort()
{
return role_sort;
}
public void setData_scope(String data_scope)
{
this.data_scope = data_scope;
}
public String getData_scope()
{
return data_scope;
}
public void setMenu_check_strictly(Integer menu_check_strictly)
{
this.menu_check_strictly = menu_check_strictly;
}
public Integer getMenu_check_strictly()
{
return menu_check_strictly;
}
public void setDept_check_strictly(Integer dept_check_strictly)
{
this.dept_check_strictly = dept_check_strictly;
}
public Integer getDept_check_strictly()
{
return dept_check_strictly;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setDel_flag(String del_flag)
{
this.del_flag = del_flag;
}
public String getDel_flag()
{
return del_flag;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("role_id", getRole_id())
.append("role_name", getRole_name())
.append("role_key", getRole_key())
.append("role_sort", getRole_sort())
.append("data_scope", getData_scope())
.append("menu_check_strictly", getMenu_check_strictly())
.append("dept_check_strictly", getDept_check_strictly())
.append("status", getStatus())
.append("del_flag", getDel_flag())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 角色和部门关联表对象 sys_role_dept
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("角色和部门关联表")
public class SysRoleDept extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 角色ID */
@ApiModelProperty("角色ID")
private java.math.BigInteger role_id;
/** 部门ID */
@ApiModelProperty("部门ID")
private java.math.BigInteger dept_id;
public void setRole_id(java.math.BigInteger role_id)
{
this.role_id = role_id;
}
public java.math.BigInteger getRole_id()
{
return role_id;
}
public void setDept_id(java.math.BigInteger dept_id)
{
this.dept_id = dept_id;
}
public java.math.BigInteger getDept_id()
{
return dept_id;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("role_id", getRole_id())
.append("dept_id", getDept_id())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 角色和菜单关联表对象 sys_role_menu
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("角色和菜单关联表")
public class SysRoleMenu extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 角色ID */
@ApiModelProperty("角色ID")
private java.math.BigInteger role_id;
/** 菜单ID */
@ApiModelProperty("菜单ID")
private java.math.BigInteger menu_id;
public void setRole_id(java.math.BigInteger role_id)
{
this.role_id = role_id;
}
public java.math.BigInteger getRole_id()
{
return role_id;
}
public void setMenu_id(java.math.BigInteger menu_id)
{
this.menu_id = menu_id;
}
public java.math.BigInteger getMenu_id()
{
return menu_id;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("role_id", getRole_id())
.append("menu_id", getMenu_id())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 用户信息表对象 sys_user
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("用户信息表")
public class SysUser extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 用户ID */
@ApiModelProperty("用户ID")
private java.math.BigInteger user_id;
/** 部门ID */
@ApiModelProperty("部门ID")
private java.math.BigInteger dept_id;
/** 用户账号 */
@ApiModelProperty("用户账号")
private String user_name;
/** 用户昵称 */
@ApiModelProperty("用户昵称")
private String nick_name;
/** 用户类型(00系统用户) */
@ApiModelProperty("用户类型(00系统用户)")
private String user_type;
/** 用户邮箱 */
@ApiModelProperty("用户邮箱")
private String email;
/** 手机号码 */
@ApiModelProperty("手机号码")
private String phonenumber;
/** 用户性别(0男 1女 2未知) */
@ApiModelProperty("用户性别(0男 1女 2未知)")
private String sex;
/** 头像地址 */
@ApiModelProperty("头像地址")
private String avatar;
/** 密码 */
@ApiModelProperty("密码")
private String password;
/** 帐号状态(0正常 1停用) */
@ApiModelProperty("帐号状态(0正常 1停用)")
private String status;
/** 删除标志(0代表存在 2代表删除) */
@ApiModelProperty("删除标志(0代表存在 2代表删除)")
private String del_flag;
/** 最后登录IP */
@ApiModelProperty("最后登录IP")
private String login_ip;
/** 最后登录时间 */
@ApiModelProperty("最后登录时间")
private java.util.Date login_date;
/** 创建者 */
@ApiModelProperty("创建者")
private String create_by;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 更新者 */
@ApiModelProperty("更新者")
private String update_by;
/** 更新时间 */
@ApiModelProperty("更新时间")
private java.util.Date update_time;
public void setUser_id(java.math.BigInteger user_id)
{
this.user_id = user_id;
}
public java.math.BigInteger getUser_id()
{
return user_id;
}
public void setDept_id(java.math.BigInteger dept_id)
{
this.dept_id = dept_id;
}
public java.math.BigInteger getDept_id()
{
return dept_id;
}
public void setUser_name(String user_name)
{
this.user_name = user_name;
}
public String getUser_name()
{
return user_name;
}
public void setNick_name(String nick_name)
{
this.nick_name = nick_name;
}
public String getNick_name()
{
return nick_name;
}
public void setUser_type(String user_type)
{
this.user_type = user_type;
}
public String getUser_type()
{
return user_type;
}
public void setEmail(String email)
{
this.email = email;
}
public String getEmail()
{
return email;
}
public void setPhonenumber(String phonenumber)
{
this.phonenumber = phonenumber;
}
public String getPhonenumber()
{
return phonenumber;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String getSex()
{
return sex;
}
public void setAvatar(String avatar)
{
this.avatar = avatar;
}
public String getAvatar()
{
return avatar;
}
public void setPassword(String password)
{
this.password = password;
}
public String getPassword()
{
return password;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setDel_flag(String del_flag)
{
this.del_flag = del_flag;
}
public String getDel_flag()
{
return del_flag;
}
public void setLogin_ip(String login_ip)
{
this.login_ip = login_ip;
}
public String getLogin_ip()
{
return login_ip;
}
public void setLogin_date(java.util.Date login_date)
{
this.login_date = login_date;
}
public java.util.Date getLogin_date()
{
return login_date;
}
public void setCreate_by(String create_by)
{
this.create_by = create_by;
}
public String getCreate_by()
{
return create_by;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setUpdate_by(String update_by)
{
this.update_by = update_by;
}
public String getUpdate_by()
{
return update_by;
}
public void setUpdate_time(java.util.Date update_time)
{
this.update_time = update_time;
}
public java.util.Date getUpdate_time()
{
return update_time;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("user_id", getUser_id())
.append("dept_id", getDept_id())
.append("user_name", getUser_name())
.append("nick_name", getNick_name())
.append("user_type", getUser_type())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())
.append("avatar", getAvatar())
.append("password", getPassword())
.append("status", getStatus())
.append("del_flag", getDel_flag())
.append("login_ip", getLogin_ip())
.append("login_date", getLogin_date())
.append("create_by", getCreate_by())
.append("create_time", getCreate_time())
.append("update_by", getUpdate_by())
.append("update_time", getUpdate_time())
.append("remark", getRemark())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 用户与岗位关联表对象 sys_user_post
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("用户与岗位关联表")
public class SysUserPost extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 用户ID */
@ApiModelProperty("用户ID")
private java.math.BigInteger user_id;
/** 岗位ID */
@ApiModelProperty("岗位ID")
private java.math.BigInteger post_id;
public void setUser_id(java.math.BigInteger user_id)
{
this.user_id = user_id;
}
public java.math.BigInteger getUser_id()
{
return user_id;
}
public void setPost_id(java.math.BigInteger post_id)
{
this.post_id = post_id;
}
public java.math.BigInteger getPost_id()
{
return post_id;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("user_id", getUser_id())
.append("post_id", getPost_id())
.toString();
}
}
... ...
package com.zhonglai.luhui.domain.sys;
import com.zhonglai.luhui.util.sql.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 用户和角色关联表对象 sys_user_role
*
* @author 钟来
* @date 2024-04-15
*/
@ApiModel("用户和角色关联表")
public class SysUserRole extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 用户ID */
@ApiModelProperty("用户ID")
private java.math.BigInteger user_id;
/** 角色ID */
@ApiModelProperty("角色ID")
private java.math.BigInteger role_id;
public void setUser_id(java.math.BigInteger user_id)
{
this.user_id = user_id;
}
public java.math.BigInteger getUser_id()
{
return user_id;
}
public void setRole_id(java.math.BigInteger role_id)
{
this.role_id = role_id;
}
public java.math.BigInteger getRole_id()
{
return role_id;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("user_id", getUser_id())
.append("role_id", getRole_id())
.toString();
}
}
... ...
package com.zhonglai.luhui.redis.config;
import com.zhonglai.luhui.redis.service.RedisService;
import com.zhonglai.luhui.redis.service.RedisClien;
import redis.clients.jedis.JedisPoolConfig;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
... ... @@ -85,7 +84,7 @@ public class RedisConfig {
{
// 加载属性文件
Properties properties = new Properties();
try (InputStream input = RedisService.class.getClassLoader().getResourceAsStream("jedis.properties")) {
try (InputStream input = RedisClien.class.getClassLoader().getResourceAsStream("jedis.properties")) {
if (input == null) {
System.out.println("Cannot find jedis.properties file in the classpath");
return properties;
... ...
... ... @@ -4,11 +4,11 @@ import com.zhonglai.luhui.redis.config.RedisConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class RedisService {
public class RedisClien {
private JedisPool jedisPool;
public RedisService(RedisConfig redisConfig)
public RedisClien(RedisConfig redisConfig)
{
// 创建JedisPool实例,并传入密码
jedisPool = new JedisPool(redisConfig.getPoolConfig(), redisConfig.getHost(), redisConfig.getPort(), redisConfig.getTimeout(),redisConfig.getUser(), redisConfig.getPassword(),redisConfig.getDatabase());
... ... @@ -19,11 +19,18 @@ public class RedisService {
return jedisPool.getResource();
}
public void exeJedis(RedisServiceExe redisServiceExe)
public void exeJedis(RedisClienExe redisServiceExe)
{
Jedis jedis = getJedis();
redisServiceExe.exe(jedis);
jedis.close();//归还连接池
}
public <T> T exeGetJedis(Class<T> tClass,RedisClienQuery redisClienQuery)
{
Jedis jedis = getJedis();
T t = redisClienQuery.exe(jedis,tClass);
jedis.close();//归还连接池
return t;
}
}
... ...
... ... @@ -2,6 +2,6 @@ package com.zhonglai.luhui.redis.service;
import redis.clients.jedis.Jedis;
public interface RedisServiceExe {
public interface RedisClienExe {
void exe(Jedis jedis);
}
... ...
package com.zhonglai.luhui.redis.service;
import redis.clients.jedis.Jedis;
public interface RedisClienQuery {
<T> T exe(Jedis jedis, Class<T> tClass);
}
... ...
import com.zhonglai.luhui.redis.config.RedisConfig;
import com.zhonglai.luhui.redis.service.RedisService;
import com.zhonglai.luhui.redis.service.RedisClien;
import java.util.concurrent.atomic.AtomicReference;
public class Test {
public static void main(String[] args) {
RedisService redisService = new RedisService(new RedisConfig());
RedisClien redisService = new RedisClien(new RedisConfig());
AtomicReference<String> str = new AtomicReference<>("");
redisService.exeJedis(jedis -> {
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>lh-springboot-redis</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- redis 缓存操作 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 阿里JSON解析器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!-- pool 对象池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
package com.zhonglai.luhui.springboot.redis.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONReader;
import com.alibaba.fastjson.JSONWriter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
/**
* Redis使用FastJson序列化
*
* @author ruoyi
*/
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
{
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private Class<T> clazz;
public FastJson2JsonRedisSerializer(Class<T> clazz)
{
super();
this.clazz = clazz;
}
@Override
public byte[] serialize(T t) throws SerializationException
{
if (t == null)
{
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName,SerializerFeature.DisableCircularReferenceDetect).getBytes(DEFAULT_CHARSET);
}
@Override
public T deserialize(byte[] bytes) throws SerializationException
{
if (bytes == null || bytes.length <= 0)
{
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
return JSON.parseObject(str, clazz);
}
}
... ...
package com.zhonglai.luhui.springboot.redis.config;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* redis配置
*
* @author ruoyi
*/
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport
{
@Bean
@SuppressWarnings(value = { "unchecked", "rawtypes" })
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
{
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(serializer);
// Hash的key也采用StringRedisSerializer的序列化方式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
@Bean
public DefaultRedisScript<Long> limitScript()
{
DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
redisScript.setScriptText(limitScriptText());
redisScript.setResultType(Long.class);
return redisScript;
}
/**
* 限流脚本
*/
private String limitScriptText()
{
return "local key = KEYS[1]\n" +
"local count = tonumber(ARGV[1])\n" +
"local time = tonumber(ARGV[2])\n" +
"local current = redis.call('get', key);\n" +
"if current and tonumber(current) > count then\n" +
" return tonumber(current);\n" +
"end\n" +
"current = redis.call('incr', key)\n" +
"if tonumber(current) == 1 then\n" +
" redis.call('expire', key, time)\n" +
"end\n" +
"return tonumber(current);";
}
}
... ...
package com.zhonglai.luhui.springboot.redis.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* spring redis 工具类
*
* @author ruoyi
**/
@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
public class RedisCache
{
@Autowired
public RedisTemplate redisTemplate;
/**
* 缓存基本的对象,Integer、String、实体类等
*
* @param key 缓存的键值
* @param value 缓存的值
*/
public <T> void setCacheObject(final String key, final T value)
{
redisTemplate.opsForValue().set(key, value);
}
/**
* 缓存基本的对象,Integer、String、实体类等
*
* @param key 缓存的键值
* @param value 缓存的值
* @param timeout 时间
* @param timeUnit 时间颗粒度
*/
public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
{
redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @return true=设置成功;false=设置失败
*/
public boolean expire(final String key, final long timeout)
{
return expire(key, timeout, TimeUnit.SECONDS);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @param unit 时间单位
* @return true=设置成功;false=设置失败
*/
public boolean expire(final String key, final long timeout, final TimeUnit unit)
{
return redisTemplate.expire(key, timeout, unit);
}
/**
* 获取有效时间
*
* @param key Redis键
* @return 有效时间
*/
public long getExpire(final String key)
{
return redisTemplate.getExpire(key);
}
/**
* 判断 key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public Boolean hasKey(String key)
{
return redisTemplate.hasKey(key);
}
/**
* 获得缓存的基本对象。
*
* @param key 缓存键值
* @return 缓存键值对应的数据
*/
public <T> T getCacheObject(final String key)
{
ValueOperations<String, T> operation = redisTemplate.opsForValue();
return operation.get(key);
}
/**
* 删除单个对象
*
* @param key
*/
public boolean deleteObject(final String key)
{
return redisTemplate.delete(key);
}
/**
* 删除集合对象
*
* @param collection 多个对象
* @return
*/
public boolean deleteObject(final Collection collection)
{
return redisTemplate.delete(collection) > 0;
}
/**
* 缓存List数据
*
* @param key 缓存的键值
* @param dataList 待缓存的List数据
* @return 缓存的对象
*/
public <T> long setCacheList(final String key, final List<T> dataList)
{
Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
return count == null ? 0 : count;
}
/**
* 获得缓存的list对象
*
* @param key 缓存的键值
* @return 缓存键值对应的数据
*/
public <T> List<T> getCacheList(final String key)
{
return redisTemplate.opsForList().range(key, 0, -1);
}
/**
* 缓存Set
*
* @param key 缓存键值
* @param dataSet 缓存的数据
* @return 缓存数据的对象
*/
public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
{
BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
Iterator<T> it = dataSet.iterator();
while (it.hasNext())
{
setOperation.add(it.next());
}
return setOperation;
}
/**
* 获得缓存的set
*
* @param key
* @return
*/
public <T> Set<T> getCacheSet(final String key)
{
return redisTemplate.opsForSet().members(key);
}
/**
* 缓存Map
*
* @param key
* @param dataMap
*/
public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
{
if (dataMap != null) {
redisTemplate.opsForHash().putAll(key, dataMap);
}
}
/**
* 获得缓存的Map
*
* @param key
* @return
*/
public <T> Map<String, T> getCacheMap(final String key)
{
return redisTemplate.opsForHash().entries(key);
}
/**
* 往Hash中存入数据
*
* @param key Redis键
* @param hKey Hash键
* @param value 值
*/
public <T> void setCacheMapValue(final String key, final String hKey, final T value)
{
redisTemplate.opsForHash().put(key, hKey, value);
}
/**
* 获取Hash中的数据
*
* @param key Redis键
* @param hKey Hash键
* @return Hash中的对象
*/
public <T> T getCacheMapValue(final String key, final String hKey)
{
HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
return opsForHash.get(key, hKey);
}
/**
* 获取多个Hash中的数据
*
* @param key Redis键
* @param hKeys Hash键集合
* @return Hash对象集合
*/
public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
{
return redisTemplate.opsForHash().multiGet(key, hKeys);
}
/**
* 删除Hash中的某条数据
*
* @param key Redis键
* @param hKey Hash键
* @return 是否成功
*/
public boolean deleteCacheMapValue(final String key, final String hKey)
{
return redisTemplate.opsForHash().delete(key, hKey) > 0;
}
/**
* 获得缓存的基本对象列表
*
* @param pattern 字符串前缀
* @return 对象列表
*/
public Collection<String> keys(final String pattern)
{
return redisTemplate.keys(pattern);
}
}
... ...
... ... @@ -19,5 +19,6 @@
<module>lh-common-util</module>
<module>lh-jedis-redis</module>
<module>lh-springboot-common</module>
<module>lh-springboot-redis</module>
</modules>
</project>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>lh-admin-security</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-domain</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-springboot-log</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jedis-redis</artifactId>
</dependency>
<!-- spring security 安全认证 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- 自定义验证注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- 解析客户端操作系统、浏览器等 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
package com.zhonglai.luhui.admin.security.constant;
/**
* 缓存的key 常量
*
* @author ruoyi
*/
public class CacheConstants
{
/**
* 登录用户 redis key
*/
public static final String LOGIN_TOKEN_KEY = "login_tokens:";
/**
* 验证码 redis key
*/
public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
/**
* 参数管理 cache key
*/
public static final String SYS_CONFIG_KEY = "sys_config:";
/**
* 字典管理 cache key
*/
public static final String SYS_DICT_KEY = "sys_dict:";
/**
* 防重提交 redis key
*/
public static final String REPEAT_SUBMIT_KEY = "repeat_submit:";
/**
* 限流 redis key
*/
public static final String RATE_LIMIT_KEY = "rate_limit:";
/**
* 登录账户密码错误次数 redis key
*/
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
}
... ...
package com.zhonglai.luhui.admin.security.context;
import org.springframework.security.core.Authentication;
/**
* 身份验证信息
*
* @author ruoyi
*/
public class AuthenticationContextHolder
{
private static final ThreadLocal<Authentication> contextHolder = new ThreadLocal<>();
public static Authentication getContext()
{
return contextHolder.get();
}
public static void setContext(Authentication context)
{
contextHolder.set(context);
}
public static void clearContext()
{
contextHolder.remove();
}
}
... ...
package com.zhonglai.luhui.admin.security.context;
import cn.hutool.core.convert.Convert;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
/**
* 权限信息
*
* @author ruoyi
*/
public class PermissionContextHolder
{
private static final String PERMISSION_CONTEXT_ATTRIBUTES = "PERMISSION_CONTEXT";
public static void setContext(String permission)
{
RequestContextHolder.currentRequestAttributes().setAttribute(PERMISSION_CONTEXT_ATTRIBUTES, permission,
RequestAttributes.SCOPE_REQUEST);
}
public static String getContext()
{
return Convert.toStr(RequestContextHolder.currentRequestAttributes().getAttribute(PERMISSION_CONTEXT_ATTRIBUTES,
RequestAttributes.SCOPE_REQUEST));
}
}
... ...
package com.zhonglai.luhui.admin.security.filter;
import com.zhonglai.luhui.admin.security.model.LoginUser;
import com.zhonglai.luhui.admin.security.service.TokenService;
import com.zhonglai.luhui.admin.security.utils.SecurityUtils;
import com.zhonglai.luhui.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* token过滤器 验证token有效性
*
* @author ruoyi
*/
@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
{
@Autowired
private TokenService tokenService;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException
{
LoginUser loginUser = tokenService.getLoginUser(request);
if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
{
tokenService.verifyToken(loginUser);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
}
chain.doFilter(request, response);
}
}
... ...
package com.zhonglai.luhui.admin.security.handle;
import com.alibaba.fastjson.JSON;
import com.zhonglai.luhui.springboot.util.ServletUtils;
import com.zhonglai.luhui.sprngboot.common.constant.HttpStatus;
import com.zhonglai.luhui.sprngboot.common.core.domain.AjaxResult;
import com.zhonglai.luhui.util.StringUtils;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Serializable;
/**
* 认证失败处理类 返回未授权
*
* @author ruoyi
*/
@Component
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable
{
private static final long serialVersionUID = -8970718410437077606L;
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e)
throws IOException
{
int code = HttpStatus.UNAUTHORIZED;
String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI());
ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg)));
}
}
... ...
package com.zhonglai.luhui.admin.security.handle;
import com.alibaba.fastjson.JSON;
import com.zhonglai.luhui.admin.security.model.LoginUser;
import com.zhonglai.luhui.admin.security.service.TokenService;
import com.zhonglai.luhui.springboot.log.manager.AsyncManager;
import com.zhonglai.luhui.springboot.log.manager.factory.AsyncFactory;
import com.zhonglai.luhui.springboot.util.ServletUtils;
import com.zhonglai.luhui.sprngboot.common.constant.Constants;
import com.zhonglai.luhui.sprngboot.common.core.domain.AjaxResult;
import com.zhonglai.luhui.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 自定义退出处理类 返回成功
*
* @author ruoyi
*/
@Configuration
public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler
{
@Autowired
private TokenService tokenService;
/**
* 退出处理
*
* @return
*/
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException
{
LoginUser loginUser = tokenService.getLoginUser(request);
if (StringUtils.isNotNull(loginUser))
{
String userName = loginUser.getUsername();
// 删除用户缓存记录
tokenService.delLoginUser(loginUser.getToken());
// 记录用户退出日志
AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功"));
}
ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success("退出成功")));
}
}
... ...
package com.zhonglai.luhui.admin.security.model;
/**
* 用户登录对象
*
* @author ruoyi
*/
public class LoginBody
{
/**
* 用户名
*/
private String username;
/**
* 用户密码
*/
private String password;
/**
* 验证码
*/
private String code;
/**
* 唯一标识
*/
private String uuid;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getCode()
{
return code;
}
public void setCode(String code)
{
this.code = code;
}
public String getUuid()
{
return uuid;
}
public void setUuid(String uuid)
{
this.uuid = uuid;
}
}
... ...
package com.zhonglai.luhui.admin.security.model;
import com.alibaba.fastjson.annotation.JSONField;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
import java.util.Set;
/**
* 登录用户身份权限
*
* @author ruoyi
*/
public class LoginUser implements UserDetails
{
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long userId;
/**
* 部门ID
*/
private Long deptId;
/**
* 用户唯一标识
*/
private String token;
/**
* 登录时间
*/
private Long loginTime;
/**
* 过期时间
*/
private Long expireTime;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地点
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 权限列表
*/
private Set<String> permissions;
/**
* 用户信息
*/
private SecurityUserInfo user;
public Long getUserId()
{
return userId;
}
public void setUserId(Long userId)
{
this.userId = userId;
}
public Long getDeptId()
{
return deptId;
}
public void setDeptId(Long deptId)
{
this.deptId = deptId;
}
public String getToken()
{
return token;
}
public void setToken(String token)
{
this.token = token;
}
public LoginUser()
{
}
public LoginUser(SecurityUserInfo user, Set<String> permissions)
{
this.user = user;
this.permissions = permissions;
}
public LoginUser(Long userId, Long deptId, SecurityUserInfo user, Set<String> permissions)
{
this.userId = userId;
this.deptId = deptId;
this.user = user;
this.permissions = permissions;
}
@JSONField(serialize = false)
@Override
public String getPassword()
{
return user.getPassword();
}
@Override
public String getUsername()
{
return user.getUserName();
}
/**
* 账户是否未过期,过期无法验证
*/
@JSONField(serialize = false)
@Override
public boolean isAccountNonExpired()
{
return true;
}
/**
* 指定用户是否解锁,锁定的用户无法进行身份验证
*
* @return
*/
@JSONField(serialize = false)
@Override
public boolean isAccountNonLocked()
{
return true;
}
/**
* 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
*
* @return
*/
@JSONField(serialize = false)
@Override
public boolean isCredentialsNonExpired()
{
return true;
}
/**
* 是否可用 ,禁用的用户不能身份验证
*
* @return
*/
@JSONField(serialize = false)
@Override
public boolean isEnabled()
{
return true;
}
public Long getLoginTime()
{
return loginTime;
}
public void setLoginTime(Long loginTime)
{
this.loginTime = loginTime;
}
public String getIpaddr()
{
return ipaddr;
}
public void setIpaddr(String ipaddr)
{
this.ipaddr = ipaddr;
}
public String getLoginLocation()
{
return loginLocation;
}
public void setLoginLocation(String loginLocation)
{
this.loginLocation = loginLocation;
}
public String getBrowser()
{
return browser;
}
public void setBrowser(String browser)
{
this.browser = browser;
}
public String getOs()
{
return os;
}
public void setOs(String os)
{
this.os = os;
}
public Long getExpireTime()
{
return expireTime;
}
public void setExpireTime(Long expireTime)
{
this.expireTime = expireTime;
}
public Set<String> getPermissions()
{
return permissions;
}
public void setPermissions(Set<String> permissions)
{
this.permissions = permissions;
}
public SecurityUserInfo getUser()
{
return user;
}
public void setUser(SecurityUserInfo user)
{
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities()
{
return null;
}
}
... ...
package com.zhonglai.luhui.admin.security.model;
/**
* 用户注册对象
*
* @author ruoyi
*/
public class RegisterBody extends LoginBody
{
}
... ...
package com.zhonglai.luhui.admin.security.model;
public interface SecurityUserInfo {
String getPassword();
String getUserName();
}
... ...
package com.zhonglai.luhui.admin.security.service;
import com.zhonglai.luhui.admin.security.constant.CacheConstants;
import com.zhonglai.luhui.admin.security.model.LoginUser;
import com.zhonglai.luhui.springboot.redis.service.RedisCache;
import com.zhonglai.luhui.springboot.util.ServletUtils;
import com.zhonglai.luhui.springboot.util.ip.AddressUtils;
import com.zhonglai.luhui.springboot.util.ip.IpUtils;
import com.zhonglai.luhui.sprngboot.common.constant.Constants;
import com.zhonglai.luhui.util.StringUtils;
import com.zhonglai.luhui.util.uuid.IdUtils;
import eu.bitwalker.useragentutils.UserAgent;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* token验证处理
*
* @author ruoyi
*/
@Component
public class TokenService
{
// 令牌自定义标识
@Value("${token.header}")
private String header;
// 令牌秘钥
@Value("${token.secret}")
private String secret;
// 令牌有效期(默认30分钟)
@Value("${token.expireTime}")
private int expireTime;
protected static final long MILLIS_SECOND = 1000;
protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L;
@Autowired
private RedisCache redisCache;
/**
* 获取用户身份信息
*
* @return 用户信息
*/
public LoginUser getLoginUser(HttpServletRequest request)
{
// 获取请求携带的令牌
String token = getToken(request);
if (StringUtils.isNotEmpty(token))
{
try
{
Claims claims = parseToken(token);
// 解析对应的权限以及用户信息
String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
String userKey = getTokenKey(uuid);
LoginUser user = redisCache.getCacheObject(userKey);
return user;
}
catch (Exception e)
{
}
}
return null;
}
/**
* 设置用户身份信息
*/
public void setLoginUser(LoginUser loginUser)
{
if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken()))
{
refreshToken(loginUser);
}
}
/**
* 删除用户身份信息
*/
public void delLoginUser(String token)
{
if (StringUtils.isNotEmpty(token))
{
String userKey = getTokenKey(token);
redisCache.deleteObject(userKey);
}
}
/**
* 创建令牌
*
* @param loginUser 用户信息
* @return 令牌
*/
public String createToken(LoginUser loginUser)
{
String token = IdUtils.fastUUID();
loginUser.setToken(token);
setUserAgent(loginUser);
refreshToken(loginUser);
Map<String, Object> claims = new HashMap<>();
claims.put(Constants.LOGIN_USER_KEY, token);
return createToken(claims);
}
/**
* 验证令牌有效期,相差不足20分钟,自动刷新缓存
*
* @param loginUser
* @return 令牌
*/
public void verifyToken(LoginUser loginUser)
{
long expireTime = loginUser.getExpireTime();
long currentTime = System.currentTimeMillis();
if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
{
refreshToken(loginUser);
}
}
/**
* 刷新令牌有效期
*
* @param loginUser 登录信息
*/
public void refreshToken(LoginUser loginUser)
{
loginUser.setLoginTime(System.currentTimeMillis());
loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
// 根据uuid将loginUser缓存
String userKey = getTokenKey(loginUser.getToken());
redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
}
/**
* 设置用户代理信息
*
* @param loginUser 登录信息
*/
public void setUserAgent(LoginUser loginUser)
{
UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
String ip = IpUtils.getIpAddr();
loginUser.setIpaddr(ip);
loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
loginUser.setBrowser(userAgent.getBrowser().getName());
loginUser.setOs(userAgent.getOperatingSystem().getName());
}
/**
* 从数据声明生成令牌
*
* @param claims 数据声明
* @return 令牌
*/
private String createToken(Map<String, Object> claims)
{
String token = Jwts.builder()
.setClaims(claims)
.signWith(SignatureAlgorithm.HS512, secret).compact();
return token;
}
/**
* 从令牌中获取数据声明
*
* @param token 令牌
* @return 数据声明
*/
private Claims parseToken(String token)
{
return Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
}
/**
* 从令牌中获取用户名
*
* @param token 令牌
* @return 用户名
*/
public String getUsernameFromToken(String token)
{
Claims claims = parseToken(token);
return claims.getSubject();
}
/**
* 获取请求token
*
* @param request
* @return token
*/
private String getToken(HttpServletRequest request)
{
String token = request.getHeader(header);
if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX))
{
token = token.replace(Constants.TOKEN_PREFIX, "");
}
return token;
}
private String getTokenKey(String uuid)
{
return CacheConstants.LOGIN_TOKEN_KEY + uuid;
}
}
... ...
package com.zhonglai.luhui.admin.security.utils;
import com.zhonglai.luhui.admin.security.model.LoginUser;
import com.zhonglai.luhui.springboot.exception.ServiceException;
import com.zhonglai.luhui.sprngboot.common.constant.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* 安全服务工具类
*
* @author ruoyi
*/
public class SecurityUtils
{
/**
* 用户ID
**/
public static Long getUserId()
{
try
{
return getLoginUser().getUserId();
}
catch (Exception e)
{
throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取部门ID
**/
public static Long getDeptId()
{
try
{
return getLoginUser().getDeptId();
}
catch (Exception e)
{
throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取用户账户
**/
public static String getUsername()
{
try
{
return getLoginUser().getUsername();
}
catch (Exception e)
{
throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取用户
**/
public static LoginUser getLoginUser()
{
try
{
return (LoginUser) getAuthentication().getPrincipal();
}
catch (Exception e)
{
throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取Authentication
*/
public static Authentication getAuthentication()
{
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* 生成BCryptPasswordEncoder密码
*
* @param password 密码
* @return 加密字符串
*/
public static String encryptPassword(String password)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.encode(password);
}
/**
* 判断密码是否相同
*
* @param rawPassword 真实密码
* @param encodedPassword 加密后字符
* @return 结果
*/
public static boolean matchesPassword(String rawPassword, String encodedPassword)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.matches(rawPassword, encodedPassword);
}
/**
* 是否为管理员
*
* @param userId 用户ID
* @return 结果
*/
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
}
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>lh-springboot-log</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-springboot</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-domain</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-public-dao</artifactId>
</dependency>
<!-- 解析客户端操作系统、浏览器等 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
package com.zhonglai.luhui.springboot.log.annotation;
import com.zhonglai.luhui.sprngboot.common.enums.BusinessType;
import com.zhonglai.luhui.sprngboot.common.enums.OperatorType;
import java.lang.annotation.*;
/**
* 自定义操作日志记录注解
*
* @author ruoyi
*
*/
@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log
{
/**
* 模块
*/
public String title() default "";
/**
* 功能
*/
public BusinessType businessType() default BusinessType.OTHER;
/**
* 操作人类别
*/
public OperatorType operatorType() default OperatorType.MANAGE;
/**
* 是否保存请求的参数
*/
public boolean isSaveRequestData() default true;
/**
* 是否保存响应的参数
*/
public boolean isSaveResponseData() default true;
/**
* 排除指定的请求参数
*/
public String[] excludeParamNames() default {};
}
... ...
package com.zhonglai.luhui.springboot.log.manager;
import com.zhonglai.luhui.springboot.util.spring.SpringUtils;
import com.zhonglai.luhui.util.Threads;
import java.util.TimerTask;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 异步任务管理器
*
* @author ruoyi
*/
public class AsyncManager
{
/**
* 操作延迟10毫秒
*/
private final int OPERATE_DELAY_TIME = 10;
/**
* 异步操作任务调度线程池
*/
private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
/**
* 单例模式
*/
private AsyncManager(){}
private static AsyncManager me = new AsyncManager();
public static AsyncManager me()
{
return me;
}
/**
* 执行任务
*
* @param task 任务
*/
public void execute(TimerTask task)
{
executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
}
/**
* 停止任务线程池
*/
public void shutdown()
{
Threads.shutdownAndAwaitTermination(executor);
}
}
... ...
package com.zhonglai.luhui.springboot.log.manager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
/**
* 确保应用退出时能关闭后台线程
*
* @author ruoyi
*/
@Component
public class ShutdownManager
{
private static final Logger logger = LoggerFactory.getLogger("sys-user");
@PreDestroy
public void destroy()
{
shutdownAsyncManager();
}
/**
* 停止异步执行任务
*/
private void shutdownAsyncManager()
{
try
{
logger.info("====关闭后台任务任务线程池====");
AsyncManager.me().shutdown();
}
catch (Exception e)
{
logger.error(e.getMessage(), e);
}
}
}
... ...
package com.zhonglai.luhui.springboot.log.manager.factory;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.domain.sys.SysLogininfor;
import com.zhonglai.luhui.springboot.util.ServletUtils;
import com.zhonglai.luhui.springboot.util.ip.AddressUtils;
import com.zhonglai.luhui.springboot.util.ip.IpUtils;
import com.zhonglai.luhui.springboot.util.spring.SpringUtils;
import com.zhonglai.luhui.sprngboot.common.constant.Constants;
import com.zhonglai.luhui.util.LogUtils;
import com.zhonglai.luhui.util.StringUtils;
import eu.bitwalker.useragentutils.UserAgent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.TimerTask;
/**
* 异步工厂(产生任务用)
*
* @author ruoyi
*/
public class AsyncFactory
{
private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
/**
* 记录登录信息
*
* @param username 用户名
* @param status 状态
* @param message 消息
* @param args 列表
* @return 任务task
*/
public static TimerTask recordLogininfor(final String username, final String status, final String message,
final Object... args)
{
final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
final String ip = IpUtils.getIpAddr();
return new TimerTask()
{
@Override
public void run()
{
String address = AddressUtils.getRealAddressByIP(ip);
StringBuilder s = new StringBuilder();
s.append(LogUtils.getBlock(ip));
s.append(address);
s.append(LogUtils.getBlock(username));
s.append(LogUtils.getBlock(status));
s.append(LogUtils.getBlock(message));
// 打印信息到日志
sys_user_logger.info(s.toString(), args);
// 获取客户端操作系统
String os = userAgent.getOperatingSystem().getName();
// 获取客户端浏览器
String browser = userAgent.getBrowser().getName();
// 封装对象
SysLogininfor logininfor = new SysLogininfor();
logininfor.setUser_name(username);
logininfor.setIpaddr(ip);
logininfor.setLogin_location(address);
logininfor.setBrowser(browser);
logininfor.setOs(os);
logininfor.setMsg(message);
// 日志状态
if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
{
logininfor.setStatus(Constants.SUCCESS);
}
else if (Constants.LOGIN_FAIL.equals(status))
{
logininfor.setStatus(Constants.FAIL);
}
// 插入数据
SpringUtils.getBean(PublicService.class).insert(logininfor);
}
};
}
/**
* 操作日志记录
*
* @param operLog 操作日志信息
* @return 任务task
*/
public static TimerTask recordOper(final com.zhonglai.luhui.domain.sys.SysOperLog operLog)
{
return new TimerTask()
{
@Override
public void run()
{
// 远程查询操作地点
operLog.setOper_location(AddressUtils.getRealAddressByIP(operLog.getOper_ip()));
SpringUtils.getBean(PublicService.class).insert(operLog);
}
};
}
}
... ...
... ... @@ -70,6 +70,13 @@
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-springboot-common</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-springboot-redis</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-domain</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
package com.zhonglai.luhui.springboot.util.ip;
import com.zhonglai.luhui.springboot.util.ServletUtils;
import com.zhonglai.luhui.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
... ... @@ -19,6 +20,15 @@ public class IpUtils
{
/**
* 获取客户端IP
*
* @return IP地址
*/
public static String getIpAddr()
{
return getIpAddr(ServletUtils.getRequest());
}
/**
* 获取客户端IP
*
* @param request 请求对象
* @return IP地址
... ...
... ... @@ -15,6 +15,8 @@
<module>lh-springboot</module>
<module>lh-swagger</module>
<module>lh-springboot-druid-dbconfig</module>
<module>lh-admin-security</module>
<module>lh-springboot-log</module>
</modules>
<properties>
... ...
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 1.0.0 # 版权年份 copyrightYear: 2024 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.zhonglai: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-admin # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.zhonglai.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/*
\ No newline at end of file
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 1.0.0 # 版权年份 copyrightYear: 2024 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.zhonglai: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: config-path: "jedis.properties" # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-admin # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.zhonglai.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/*
\ No newline at end of file
... ...
# jedis.properties
jedis.pool.maxTotal=100
jedis.pool.maxIdle=50
jedis.pool.minIdle=10
jedis.pool.testOnBorrow=true
jedis.pool.testOnReturn=true
jedis.pool.testWhileIdle=true
jedis.pool.minEvictableIdleTimeMillis=60000
jedis.pool.timeBetweenEvictionRunsMillis=30000
jedis.pool.numTestsPerEvictionRun=3
jedis.pool.blockWhenExhausted=true
jedis.host=47.112.163.61
jedis.port=9527
jedis.timeout=2000
jedis.password=Luhui586
jedis.database=3
\ No newline at end of file
... ...
... ... @@ -29,23 +29,15 @@
<commons.fileupload.version>1.4</commons.fileupload.version>
<lombok.version>1.18.12</lombok.version>
<poi.version>4.1.2</poi.version>
<fastjson.version>1.2.80</fastjson.version>
<druid.version>1.2.16</druid.version>
<aspectj.version>1.9.7</aspectj.version>
<fastjson.version>1.2.80</fastjson.version>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<!-- &lt;!&ndash; spring-boot-devtools &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-devtools</artifactId>-->
<!-- <version>${springboot.version}</version>-->
<!-- <optional>true</optional> &lt;!&ndash; 表示依赖不会传递 &ndash;&gt;-->
<!-- </dependency>-->
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
... ... @@ -108,6 +100,11 @@
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<!-- 内部包 -->
<dependency>
... ... @@ -160,12 +157,20 @@
<artifactId>lh-spring-service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-admin-security</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-springboot-redis</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-springboot-log</artifactId>
<version>${project.version}</version>
</dependency>
<!--常用工具类 -->
... ... @@ -334,6 +339,20 @@
<version>${aspectj.version}</version>
</dependency>
<!-- 解析客户端操作系统、浏览器等 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
<!-- pool 对象池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</dependencyManagement>
... ...