| | |
| | | private String nickName; |
| | | |
| | | /** |
| | | * 用户类型(sys_user系统用户) |
| | | */ |
| | | @ApiModelProperty(value = "用户类型") |
| | | private String userType; |
| | | |
| | | /** |
| | | * 用户邮箱 |
| | | */ |
| | | @Sensitive(strategy = SensitiveStrategy.EMAIL) |
| | |
| | | package com.ruoyi.common.core.domain.model; |
| | | |
| | | import com.ruoyi.common.helper.LoginHelper; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | import lombok.experimental.Accessors; |
| | |
| | | */ |
| | | private String username; |
| | | |
| | | /** |
| | | * 获取登录id |
| | | */ |
| | | public String getLoginId() { |
| | | return userType + userId; |
| | | return userType + LoginHelper.JOIN_CODE + userId; |
| | | } |
| | | |
| | | } |
| | |
| | | package com.ruoyi.common.core.domain.model;
|
| | |
|
| | | import io.swagger.annotations.ApiModel;
|
| | |
|
| | | /**
|
| | | * 用户注册对象
|
| | | *
|
| | | * @author Lion Li
|
| | | */
|
| | | @ApiModel("用户注册对象")
|
| | | public class RegisterBody extends LoginBody {
|
| | |
|
| | | }
|
| | | package com.ruoyi.common.core.domain.model; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | /** |
| | | * 用户注册对象 |
| | | * |
| | | * @author Lion Li |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @Accessors(chain = true) |
| | | @ApiModel("用户注册对象") |
| | | public class RegisterBody extends LoginBody { |
| | | |
| | | @ApiModelProperty(value = "用户类型") |
| | | private String userType; |
| | | |
| | | } |
| | |
| | | package com.ruoyi.common.enums; |
| | | |
| | | import com.ruoyi.common.exception.UtilException; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * 设备类型 |
| | | * 针对两套 用户体系 |
| | | * 针对多套 用户体系 |
| | | * |
| | | * @author Lion Li |
| | | */ |
| | |
| | | /** |
| | | * pc端 |
| | | */ |
| | | SYS_USER("sys_user:"), |
| | | SYS_USER("sys_user"), |
| | | |
| | | /** |
| | | * app端 |
| | | */ |
| | | APP_USER("app_user:"); |
| | | APP_USER("app_user"); |
| | | |
| | | private final String userType; |
| | | |
| | |
| | | @NoArgsConstructor(access = AccessLevel.PRIVATE) |
| | | public class LoginHelper { |
| | | |
| | | private static final String LOGIN_USER_KEY = "loginUser"; |
| | | public static final String JOIN_CODE = ":"; |
| | | public static final String LOGIN_USER_KEY = "loginUser"; |
| | | |
| | | private static final ThreadLocal<LoginUser> LOGIN_CACHE = new ThreadLocal<>(); |
| | | |
| | | /** |
| | |
| | | String userId = null; |
| | | for (UserType value : UserType.values()) { |
| | | if (StringUtils.contains(loginId, value.getUserType())) { |
| | | userId = StringUtils.replace(loginId, value.getUserType(), StringUtils.EMPTY); |
| | | String[] strs = StringUtils.split(loginId, JOIN_CODE); |
| | | // 用户id在总是在最后 |
| | | userId = strs[strs.length - 1]; |
| | | } |
| | | } |
| | | if (StringUtils.isBlank(userId)) { |
| | |
| | | import com.ruoyi.common.core.service.LogininforService; |
| | | import com.ruoyi.common.enums.DeviceType; |
| | | import com.ruoyi.common.enums.UserStatus; |
| | | import com.ruoyi.common.enums.UserType; |
| | | import com.ruoyi.common.exception.user.CaptchaException; |
| | | import com.ruoyi.common.exception.user.CaptchaExpireException; |
| | | import com.ruoyi.common.exception.user.UserException; |
| | |
| | | throw new UserException("user.password.retry.limit.exceed", Constants.LOGIN_ERROR_LIMIT_TIME); |
| | | } |
| | | |
| | | SysUser user = userService.selectUserByUserName(username); |
| | | if (StringUtils.isNull(user)) { |
| | | log.info("登录用户:{} 不存在.", username); |
| | | throw new UserException("user.not.exists", username); |
| | | } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { |
| | | log.info("登录用户:{} 已被删除.", username); |
| | | throw new UserException("user.password.delete", username); |
| | | } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { |
| | | log.info("登录用户:{} 已被停用.", username); |
| | | throw new UserException("user.blocked", username); |
| | | } |
| | | SysUser user = loadUserByUsername(username); |
| | | |
| | | if (!SecurityUtils.matchesPassword(password, user.getPassword())) { |
| | | // 是否第一次 |
| | | errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1; |
| | |
| | | asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request); |
| | | recordLoginInfo(user.getUserId(), username); |
| | | |
| | | LoginUser loginUser = new LoginUser(); |
| | | loginUser.setUserId(user.getUserId()); |
| | | loginUser.setDeptId(user.getDeptId()); |
| | | loginUser.setUsername(user.getUserName()); |
| | | loginUser.setUserType(UserType.SYS_USER.getUserType()); |
| | | loginUser.setMenuPermission(permissionService.getMenuPermission(user)); |
| | | loginUser.setRolePermission(permissionService.getRolePermission(user)); |
| | | LoginUser loginUser = buildLoginUser(user); |
| | | |
| | | // 生成token |
| | | LoginHelper.loginByDevice(loginUser, DeviceType.PC); |
| | |
| | | } |
| | | } |
| | | |
| | | private SysUser loadUserByUsername(String username) { |
| | | SysUser user = userService.selectUserByUserName(username); |
| | | if (StringUtils.isNull(user)) { |
| | | log.info("登录用户:{} 不存在.", username); |
| | | throw new UserException("user.not.exists", username); |
| | | } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { |
| | | log.info("登录用户:{} 已被删除.", username); |
| | | throw new UserException("user.password.delete", username); |
| | | } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { |
| | | log.info("登录用户:{} 已被停用.", username); |
| | | throw new UserException("user.blocked", username); |
| | | } |
| | | return user; |
| | | } |
| | | |
| | | /** |
| | | * 构建登录用户 |
| | | */ |
| | | private LoginUser buildLoginUser(SysUser user) { |
| | | LoginUser loginUser = new LoginUser(); |
| | | loginUser.setUserId(user.getUserId()); |
| | | loginUser.setDeptId(user.getDeptId()); |
| | | loginUser.setUsername(user.getUserName()); |
| | | loginUser.setUserType(user.getUserType()); |
| | | loginUser.setMenuPermission(permissionService.getMenuPermission(user)); |
| | | loginUser.setRolePermission(permissionService.getRolePermission(user)); |
| | | return loginUser; |
| | | } |
| | | |
| | | /** |
| | | * 记录登录信息 |
| | | * |
| | |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.model.RegisterBody; |
| | | import com.ruoyi.common.core.service.LogininforService; |
| | | import com.ruoyi.common.enums.UserType; |
| | | import com.ruoyi.common.exception.user.CaptchaException; |
| | | import com.ruoyi.common.exception.user.CaptchaExpireException; |
| | | import com.ruoyi.common.utils.MessageUtils; |
| | |
| | | * 注册 |
| | | */ |
| | | public String register(RegisterBody registerBody) { |
| | | String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword(); |
| | | String msg = ""; |
| | | String username = registerBody.getUsername(); |
| | | String password = registerBody.getPassword(); |
| | | // 校验用户类型是否存在 |
| | | String userType = UserType.getUserType(registerBody.getUserType()).getUserType(); |
| | | |
| | | boolean captchaOnOff = configService.selectCaptchaOnOff(); |
| | | // 验证码开关 |
| | |
| | | sysUser.setUserName(username); |
| | | sysUser.setNickName(username); |
| | | sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword())); |
| | | sysUser.setUserType(userType); |
| | | boolean regFlag = userService.registerUser(sysUser); |
| | | if (!regFlag) { |
| | | msg = "注册失败,请联系系统管理人员"; |
| | |
| | | <result property="deptId" column="dept_id"/> |
| | | <result property="userName" column="user_name"/> |
| | | <result property="nickName" column="nick_name"/> |
| | | <result property="userType" column="user_type"/> |
| | | <result property="email" column="email"/> |
| | | <result property="phonenumber" column="phonenumber"/> |
| | | <result property="sex" column="sex"/> |
| | |
| | | u.dept_id, |
| | | u.user_name, |
| | | u.nick_name, |
| | | u.user_type, |
| | | u.email, |
| | | u.avatar, |
| | | u.phonenumber, |
| | |
| | | this.$refs.registerForm.validate(valid => { |
| | | if (valid) { |
| | | this.loading = true; |
| | | register(this.registerForm).then(res => { |
| | | let registerForm = this.registerForm; |
| | | registerForm.userType = "sys_user" |
| | | register(registerForm).then(res => { |
| | | const username = this.registerForm.username; |
| | | this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', { |
| | | dangerouslyUseHTMLString: true, |
| | |
| | | dept_id bigint(20) default null comment '部门ID', |
| | | user_name varchar(30) not null comment '用户账号', |
| | | nick_name varchar(30) not null comment '用户昵称', |
| | | user_type varchar(2) default '00' comment '用户类型(00系统用户)', |
| | | user_type varchar(10) default 'sys_user' comment '用户类型(sys_user系统用户)', |
| | | email varchar(50) default '' comment '用户邮箱', |
| | | phonenumber varchar(11) default '' comment '手机号码', |
| | | sex char(1) default '0' comment '用户性别(0男 1女 2未知)', |
| | |
| | | -- ---------------------------- |
| | | -- 初始化-用户信息表数据 |
| | | -- ---------------------------- |
| | | insert into sys_user values(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员'); |
| | | insert into sys_user values(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员'); |
| | | insert into sys_user values(1, 103, 'admin', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员'); |
| | | insert into sys_user values(2, 105, 'lionli', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员'); |
| | | |
| | | |
| | | -- ---------------------------- |
| | |
| | | PRIMARY KEY (id) USING BTREE |
| | | ) ENGINE = InnoDB COMMENT = '测试树表'; |
| | | |
| | | INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (3, 108, 'test', '本部门及以下 密码666', 'sys_user', '', '', '0', '', '$2a$10$M6tZRpUZbWKq11O/z6YISePQc./Jhru8E18mmVJTr9aV8whzfjacC', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), 'test', sysdate(), NULL); |
| | | INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (4, 102, 'test1', '仅本人 密码666', 'sys_user', '', '', '0', '', '$2a$10$yBSXp5Ba1m402cxXTPSy4eXUO8CXCGvXfquNVP/XMWwZ8nf9GaoMy', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), 'test1', sysdate(), NULL); |
| | | |
| | | INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (5, '测试菜单', 0, 5, 'demo', NULL, 1, 0, 'M', '0', '0', NULL, 'star', 'admin', '2021-05-30 00:34:26', NULL, NULL, ''); |
| | | |
| | | INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1500, '测试单表', 5, 1, 'demo', 'demo/demo/index', 1, 0, 'C', '0', '0', 'demo:demo:list', '#', 'admin', '2021-05-30 00:39:23', '', NULL, '测试单表菜单'); |
| | |
| | | INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1509); |
| | | INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1510); |
| | | INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1511); |
| | | |
| | | INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (3, 108, 'test', '本部门及以下 密码666', '00', '', '', '0', '', '$2a$10$M6tZRpUZbWKq11O/z6YISePQc./Jhru8E18mmVJTr9aV8whzfjacC', '0', '0', '127.0.0.1', '2021-05-30 02:00:37', 'admin', '2021-04-22 09:50:41', 'test', '2021-05-30 02:00:37', NULL); |
| | | INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (4, 102, 'test1', '仅本人 密码666', '00', '', '', '0', '', '$2a$10$yBSXp5Ba1m402cxXTPSy4eXUO8CXCGvXfquNVP/XMWwZ8nf9GaoMy', '0', '0', '127.0.0.1', '2021-05-30 01:48:03', 'admin', '2021-05-30 01:16:02', 'test1', '2021-05-30 01:48:03', NULL); |
| | | |
| | | INSERT INTO sys_user_role(user_id, role_id) VALUES (3, 3); |
| | | INSERT INTO sys_user_role(user_id, role_id) VALUES (4, 4); |