支持手机号码、邮箱登录

pull/3/head
RuoYi 2018-05-18 23:20:19 +08:00
parent a624ac009e
commit fab59267ed
17 changed files with 360 additions and 48 deletions

View File

@ -62,18 +62,7 @@ create table sys_user (
-- 初始化-用户信息表数据
-- ----------------------------
insert into sys_user values(1, 106, 'admin', '若依', 'ry@163.com', '15888888888', '1', '', '29c67a30398638269fe600f73a054934', '111111', 'Y', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(2, 108, 'ry', '若依', 'ry@163.com', '15888888888', '1', '', '8e6d98b90472783cc73c17047ddccf36', '222222', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(3, 106, 'ly', '刘一', 'ry@163.com', '15888888888', '0', '', '648b02ef941c587a2f18a297a88a4d2f', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(4, 106, 'ce', '陈二', 'ry@163.com', '15888888888', '0', '', '9cee0cee6868803bee994cb38512f32a', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(5, 106, 'zs', '张三', 'ry@163.com', '15888888888', '0', '', 'eba13c577181da9df8133b580302b542', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(6, 106, 'ls', '李四', 'ry@163.com', '15888888888', '0', '', '15e31a50b42934e08587a137d9c22beb', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(7, 106, 'ww', '王五', 'ry@163.com', '15888888888', '0', '', 'a4e07697413f78f286650a0682899e32', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(8, 106, 'zl', '赵六', 'ry@163.com', '15888888888', '0', '', '047e1daf6e2ac6b6d706f81bb21f67ec', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(9, 106, 'sq', '孙七', 'ry@163.com', '15888888888', '0', '', '7ff6776ff40c5c0eadc6c4c52555268b', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(10, 106, 'zb', '周八', 'ry@163.com', '15888888888', '0', '', 'd41dca20a574699eaa851a6b7e7cb12f', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(11, 106, 'wj', '吴九', 'ry@163.com', '15888888888', '0', '', 'cfa9a24ab0c402cc2898795c2c3a973d', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(12, 106, 'ys', '阳十', 'ry@163.com', '15888888888', '0', '', '700a6f8c57d894bfba7692283b345db8', '123456', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
insert into sys_user values(2, 108, 'ry', '若依', 'ry@qq.com', '15666666666', '1', '', '8e6d98b90472783cc73c17047ddccf36', '222222', 'N', 0, '正常', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-- ----------------------------
-- 3、岗位信息表

View File

@ -29,9 +29,33 @@ public class UserConstants
public static final int USERNAME_MIN_LENGTH = 2;
public static final int USERNAME_MAX_LENGTH = 20;
/** 名称是否唯一的返回结果码 */
public final static String NAME_UNIQUE = "0";
public final static String NAME_NOT_UNIQUE = "1";
/** 登录名称是否唯一的返回结果码 */
public final static String USER_NAME_UNIQUE = "0";
public final static String USER_NAME_NOT_UNIQUE = "1";
/** 手机号码是否唯一的返回结果 */
public final static String USER_PHONE_UNIQUE = "0";
public final static String USER_PHONE_NOT_UNIQUE = "1";
/** e-mail 是否唯一的返回结果 */
public final static String USER_EMAIL_UNIQUE = "0";
public final static String USER_EMAIL_NOT_UNIQUE = "1";
/** 部门名称是否唯一的返回结果码 */
public final static String DEPT_NAME_UNIQUE = "0";
public final static String DEPT_NAME_NOT_UNIQUE = "1";
/** 角色名称是否唯一的返回结果码 */
public final static String ROLE_NAME_UNIQUE = "0";
public final static String ROLE_NAME_NOT_UNIQUE = "1";
/** 菜单名称是否唯一的返回结果码 */
public final static String MENU_NAME_UNIQUE = "0";
public final static String MENU_NAME_NOT_UNIQUE = "1";
/** 字典类型是否唯一的返回结果码 */
public final static String DICT_TYPE_UNIQUE = "0";
public final static String DICT_TYPE_NOT_UNIQUE = "1";
/**
*
@ -39,4 +63,14 @@ public class UserConstants
public static final int PASSWORD_MIN_LENGTH = 5;
public static final int PASSWORD_MAX_LENGTH = 20;
/**
*
*/
public static final String MOBILE_PHONE_NUMBER_PATTERN = "^0{0,1}(13[0-9]|15[0-9]|14[0-9]|18[0-9])[0-9]{8}$";
/**
*
*/
public static final String EMAIL_PATTERN = "^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?";
}

View File

@ -64,7 +64,17 @@ public class LoginService
}
// 查询用户信息
User user = userService.selectUserByName(username);
User user = userService.selectUserByLoginName(username);
if (user == null && maybeMobilePhoneNumber(username))
{
user = userService.selectUserByPhoneNumber(username);
}
if (user == null && maybeEmail(username))
{
user = userService.selectUserByEmail(username);
}
if (user == null)
{
@ -84,4 +94,22 @@ public class LoginService
return user;
}
private boolean maybeEmail(String username)
{
if (!username.matches(UserConstants.EMAIL_PATTERN))
{
return false;
}
return true;
}
private boolean maybeMobilePhoneNumber(String username)
{
if (!username.matches(UserConstants.MOBILE_PHONE_NUMBER_PATTERN))
{
return false;
}
return true;
}
}

View File

@ -145,8 +145,8 @@ public class DeptServiceImpl implements IDeptService
if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getDeptId())
&& info.getDeptId().longValue() != deptId.longValue())
{
return UserConstants.NAME_NOT_UNIQUE;
return UserConstants.DEPT_NAME_NOT_UNIQUE;
}
return UserConstants.NAME_UNIQUE;
return UserConstants.DEPT_NAME_UNIQUE;
}
}

View File

@ -107,8 +107,8 @@ public class DictTypeServiceImpl implements IDictTypeService
DictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
if (StringUtils.isNotNull(dictType) && dictType.getDictId() != dictId)
{
return UserConstants.NAME_NOT_UNIQUE;
return UserConstants.DICT_TYPE_NOT_UNIQUE;
}
return UserConstants.NAME_UNIQUE;
return UserConstants.DICT_TYPE_UNIQUE;
}
}

View File

@ -267,9 +267,9 @@ public class MenuServiceImpl implements IMenuService
if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getMenuId())
&& info.getMenuId().longValue() != menuId.longValue())
{
return UserConstants.NAME_NOT_UNIQUE;
return UserConstants.MENU_NAME_NOT_UNIQUE;
}
return UserConstants.NAME_UNIQUE;
return UserConstants.MENU_NAME_UNIQUE;
}
}

View File

@ -205,9 +205,9 @@ public class RoleServiceImpl implements IRoleService
Role info = roleMapper.checkRoleNameUnique(role.getRoleName());
if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getRoleId()) && info.getRoleId() != roleId)
{
return UserConstants.NAME_NOT_UNIQUE;
return UserConstants.ROLE_NAME_NOT_UNIQUE;
}
return UserConstants.NAME_UNIQUE;
return UserConstants.ROLE_NAME_UNIQUE;
}
/**

View File

@ -171,16 +171,46 @@ public class UserController extends BaseController
/**
*
*/
@PostMapping("/checkUserNameUnique")
@PostMapping("/checkLoginNameUnique")
@ResponseBody
public String checkUserNameUnique(User user)
public String checkLoginNameUnique(User user)
{
String uniqueFlag = "0";
if (user != null)
{
uniqueFlag = userService.checkUserNameUnique(user.getLoginName());
uniqueFlag = userService.checkLoginNameUnique(user.getLoginName());
}
return uniqueFlag;
}
/**
*
*/
@PostMapping("/checkPhoneUnique")
@ResponseBody
public String checkPhoneUnique(User user)
{
String uniqueFlag = "0";
if (user != null)
{
uniqueFlag = userService.checkPhoneUnique(user);
}
return uniqueFlag;
}
/**
*
*/
@PostMapping("/checkEmailUnique")
@ResponseBody
public String checkEmailUnique(User user)
{
String uniqueFlag = "0";
if (user != null)
{
uniqueFlag = userService.checkEmailUnique(user);
}
return uniqueFlag;
}
}

View File

@ -25,7 +25,23 @@ public interface UserMapper
* @param userName
* @return
*/
public User selectUserByName(String userName);
public User selectUserByLoginName(String userName);
/**
*
*
* @param userName
* @return
*/
public User selectUserByPhoneNumber(String phoneNumber);
/**
*
*
* @param email
* @return
*/
public User selectUserByEmail(String email);
/**
* ID
@ -73,6 +89,23 @@ public interface UserMapper
* @param loginName
* @return
*/
public int checkUserNameUnique(String loginName);
public int checkLoginNameUnique(String loginName);
/**
*
*
* @param phonenumber
* @return
*/
public User checkPhoneUnique(String phonenumber);
/**
* email
*
* @param email
* @return
*/
public User checkEmailUnique(String email);
}

View File

@ -25,7 +25,23 @@ public interface IUserService
* @param userName
* @return
*/
public User selectUserByName(String userName);
public User selectUserByLoginName(String userName);
/**
*
*
* @param userName
* @return
*/
public User selectUserByPhoneNumber(String phoneNumber);
/**
*
*
* @param email
* @return
*/
public User selectUserByEmail(String email);
/**
* ID
@ -81,7 +97,25 @@ public interface IUserService
* @param loginName
* @return
*/
public String checkUserNameUnique(String loginName);
public String checkLoginNameUnique(String loginName);
/**
*
*
* @param phonenumber
* @return
*/
public String checkPhoneUnique(User user);
/**
* email
*
* @param email
* @return
*/
public String checkEmailUnique(User user);
/**
* ID

View File

@ -66,9 +66,33 @@ public class UserServiceImpl implements IUserService
* @return
*/
@Override
public User selectUserByName(String userName)
public User selectUserByLoginName(String userName)
{
return userMapper.selectUserByName(userName);
return userMapper.selectUserByLoginName(userName);
}
/**
*
*
* @param userName
* @return
*/
@Override
public User selectUserByPhoneNumber(String phoneNumber)
{
return userMapper.selectUserByPhoneNumber(phoneNumber);
}
/**
*
*
* @param email
* @return
*/
@Override
public User selectUserByEmail(String email)
{
return userMapper.selectUserByEmail(email);
}
/**
@ -227,18 +251,56 @@ public class UserServiceImpl implements IUserService
/**
*
*
* @param userName
* @param loginName
* @return
*/
@Override
public String checkUserNameUnique(String loginName)
public String checkLoginNameUnique(String loginName)
{
int count = userMapper.checkUserNameUnique(loginName);
int count = userMapper.checkLoginNameUnique(loginName);
if (count > 0)
{
return UserConstants.NAME_NOT_UNIQUE;
return UserConstants.USER_NAME_NOT_UNIQUE;
}
return UserConstants.NAME_UNIQUE;
return UserConstants.USER_NAME_UNIQUE;
}
/**
*
*
* @param phonenumber
* @return
*/
@Override
public String checkPhoneUnique(User user)
{
Long userId = user.getUserId();
User info = userMapper.checkPhoneUnique(user.getPhonenumber());
if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getUserId())
&& info.getUserId().longValue() != userId.longValue())
{
return UserConstants.USER_PHONE_NOT_UNIQUE;
}
return UserConstants.USER_PHONE_UNIQUE;
}
/**
* email
*
* @param email
* @return
*/
@Override
public String checkEmailUnique(User user)
{
Long userId = user.getUserId();
User info = userMapper.checkEmailUnique(user.getEmail());
if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getUserId())
&& info.getUserId().longValue() != userId.longValue())
{
return UserConstants.USER_EMAIL_NOT_UNIQUE;
}
return UserConstants.USER_EMAIL_UNIQUE;
}
/**

View File

@ -66,7 +66,7 @@ shiro:
# 首页地址
indexUrl: /index
# 验证码开关
captchaEbabled: true
captchaEbabled: false
# 验证码类型 math 数组计算 char 字符
captchaType: math
cookie:

View File

@ -45,7 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
</select>
<select id="selectUserByName" parameterType="String" resultMap="UserResult">
<select id="selectUserByLoginName" parameterType="String" resultMap="UserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name, u.email, u.phonenumber, u.sex, u.avatar, u.password, u.salt, u.status, u.refuse_des, u.create_time,
d.dept_id, d.parent_id, d.dept_name, d.order_num, d.status as dept_status
from sys_user u
@ -54,10 +54,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where u.login_name = #{userName}
</select>
<select id="checkUserNameUnique" parameterType="String" resultType="int">
<select id="selectUserByPhoneNumber" parameterType="String" resultMap="UserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name, u.email, u.phonenumber, u.sex, u.avatar, u.password, u.salt, u.status, u.refuse_des, u.create_time,
d.dept_id, d.parent_id, d.dept_name, d.order_num, d.status as dept_status
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id
where u.phonenumber = #{phonenumber}
</select>
<select id="selectUserByEmail" parameterType="String" resultMap="UserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name, u.email, u.phonenumber, u.sex, u.avatar, u.password, u.salt, u.status, u.refuse_des, u.create_time,
d.dept_id, d.parent_id, d.dept_name, d.order_num, d.status as dept_status
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id
where u.email = #{email}
</select>
<select id="checkLoginNameUnique" parameterType="String" resultType="int">
select count(*) from sys_user where login_name=#{loginName}
</select>
<select id="checkPhoneUnique" parameterType="String" resultMap="UserResult">
select user_id, phonenumber from sys_user where phonenumber=#{phonenumber}
</select>
<select id="checkEmailUnique" parameterType="String" resultMap="UserResult">
select user_id, email from sys_user where email=#{email}
</select>
<select id="selectUserById" parameterType="Long" resultMap="UserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name, u.email, u.phonenumber, u.sex, u.avatar, u.password, u.salt, u.status, u.refuse_des, u.create_time,
d.dept_id, d.parent_id, d.dept_name, d.order_num, d.status as dept_status

View File

@ -5,7 +5,7 @@ $("#form-user-add").validate({
minlength: 2,
maxlength: 20,
remote: {
url: ctx + "system/user/checkUserNameUnique",
url: ctx + "system/user/checkLoginNameUnique",
type: "post",
dataType: "json",
data: {
@ -32,16 +32,50 @@ $("#form-user-add").validate({
},
email:{
required:true,
email:true
email:true,
remote: {
url: ctx + "system/user/checkEmailUnique",
type: "post",
dataType: "json",
data: {
name: function () {
return $.trim($("#email").val());
}
},
dataFilter: function (data, type) {
if (data == "0") return true;
else return false;
}
}
},
phonenumber:{
required:true,
remote: {
url: ctx + "system/user/checkPhoneUnique",
type: "post",
dataType: "json",
data: {
name: function () {
return $.trim($("#phonenumber").val());
}
},
dataFilter: function (data, type) {
if (data == "0") return true;
else return false;
}
}
},
},
messages: {
"loginName": {
remote: "用户已经存在"
}
},
"email": {
remote: "Email已经存在"
},
"phonenumber":{
remote: "手机号码已经存在"
}
},
submitHandler:function(form){
add();

View File

@ -8,12 +8,54 @@ $("#form-user-edit").validate({
},
email:{
required:true,
email:true
email:true,
remote: {
url: ctx + "system/user/checkEmailUnique",
type: "post",
dataType: "json",
data: {
"userId": function() {
return $("input[name='userId']").val();
},
"email": function() {
return $("input[name='email']").val();
}
},
dataFilter: function (data, type) {
if (data == "0") return true;
else return false;
}
}
},
phonenumber:{
required:true,
remote: {
url: ctx + "system/user/checkPhoneUnique",
type: "post",
dataType: "json",
data: {
"userId": function() {
return $("input[name='userId']").val();
},
"phonenumber": function() {
return $("input[name='phonenumber']").val();
}
},
dataFilter: function (data, type) {
if (data == "0") return true;
else return false;
}
}
},
},
messages: {
"email": {
remote: "Email已经存在"
},
"phonenumber":{
remote: "手机号码已经存在"
}
},
submitHandler:function(form){
update();
}

View File

@ -36,7 +36,7 @@
<div class="form-group">
<label class="col-sm-3 control-label">邮箱:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="email">
<input class="form-control" type="text" name="email" id="email">
</div>
</div>
<div class="form-group">

View File

@ -31,7 +31,7 @@
<div class="form-group">
<label class="col-sm-3 control-label">邮箱:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="email" th:value="${user.email}">
<input class="form-control" type="text" name="email" id="email" th:value="${user.email}">
</div>
</div>
<div class="form-group">