在实际业务需求中,登录功能不仅限于通过用户名和密码登录,为了增强系统的灵活性和用户体验,我们需要扩展登录功能,使用户能够通过手机号、邮箱、用户名等多种方式登录。
Hutool
是一个小而全的Java
工具类库,通过其丰富的工具类和方法,简化了Java
开发中的很多常见任务。Hutool
的目标是“让Java
语言更加优雅”,其提供的功能涵盖了字符串处理、日期处理、文件操作、网络请求、加密解密、Excel
操作等多个方面。
Hutool 的主要特点
轻量级:Hutool
是一个小而全的工具类库,依赖少且体积小,适合嵌入各种Java
项目中。
功能丰富:提供了大量的工具类和方法,几乎涵盖了Java
开发中的常见任务。
易用性强:设计简洁,使用方便,能够显著提高开发效率。
无第三方依赖:大部分功能不依赖于第三方库,降低了使用成本和复杂度。
Hutool
工具库来简化字符串操作和正则匹配。SysLoginService
中实现多种登录方式的判断和处理。ruoyi-common
├── pom.xml
ruoyi-framework
├── src
│ ├── main
│ │ ├── java
│ │ └── com
│ │ └── ruoyi
│ │ └── framework
│ │ └── shiro
│ │ └── service
│ │ └── SysLoginService.java
ruoyi-admin
├── src
│ ├── main
│ │ ├── java
│ │ └── com
│ │ └── ruoyi
│ │ └── web
│ │ └── controller
│ │ └── system
│ │ └── SysLoginController.java
Hutool
工具库版本与项目兼容。在ruoyi-common/pom.xml
中引入Hutool
依赖包:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.23</version>
</dependency>
在SysLoginController.java
中修改登录接口:
@ResponseBody
@PostMapping("/login")
public AjaxResult login(String username, String password) {
if (StrUtil.isEmpty(username)) {
return AjaxResult.error("登录名称不能空");
}
if (StrUtil.isEmpty(password)) {
return AjaxResult.error("登录密码不能空");
}
UsernamePasswordToken token = new UsernamePasswordToken(username, password, false);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
return AjaxResult.success("登录成功");
} catch (AuthenticationException e) {
return AjaxResult.error("登录名称或密码错误");
}
}
在SysLoginService.java
中加入手机号和邮箱的登录逻辑:
public SysUser login(String username, String password) {
// 判断是否是手机号
boolean isPhone = ReUtil.isMatch(RegexPool.MOBILE, username);
// 判断是否是邮箱
boolean isEmail = ReUtil.isMatch(RegexPool.EMAIL, username);
// 通过用户名查询用户信息
SysUser user = userService.selectUserByUserName(username);
// 如果用户为空且用户名是手机号,则通过手机号查询用户信息
if (user == null && isPhone) {
user = userService.selectUserByPhoneNumber(username);
}
// 如果用户为空且用户名是邮箱,则通过邮箱查询用户信息
if (user == null && isEmail) {
user = userService.selectUserByEmail(username);
}
// 校验用户是否存在
if (user == null) {
throw new UserNotExistsException();
}
// 校验用户状态
checkUserAllowed(user);
checkUserIsNotLocked(user);
// 校验密码是否正确
if (!passwordService.matches(user, password)) {
throw new UserPasswordNotMatchException();
}
// 记录登录信息
recordLoginInfo(user);
return user;
}
POST /login
Content-Type: application/json
{
"username": "admin",
"password": "123456.."
}
2. 通过手机号+密码方式登录
POST /login
Content-Type: application/json
{
"username": "15888888888",
"password": "123456.."
}
3. 通过邮箱+密码方式登录
POST /login
Content-Type: application/json
{
"username": "user@example.com",
"password": "123456.."
}
通过上述配置和代码修改,用户可以通过用户名、手机号、邮箱三种方式登录系统,登录成功后返回相应的成功信息,登录失败则返回错误信息。
powered by kaifamiao