在实际业务需求中,登录功能,可能不只是简单的通过用户+密码的方式进行登录,有时候需要实现用户可以通过手机号,邮箱,用户名等方式进行登录。
在ruoyi-common模块中引入hutool依赖包。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.23</version>
</dependency>
/**
* 登录
*
* @param username 用户名称
* @param password 用户密码
* @return
*/
@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("登录名称或密码错误");
}
}
在ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysLoginService.java中login方法里加入以下代码。
//判断是否是手机号
boolean isPhone = ReUtil.isMatch(RegexPool.MOBILE, username);
//判断是否是邮箱
boolean isEmail = ReUtil.isMatch(RegexPool.EMAIL, username);
//如果用户为空且用户名是手机号,则通过手机号查询用户信息
if (user == null && isPhone) {
user = userService.selectUserByPhoneNumber(username);
}
//如果用户为空且用户名是邮箱,则通过邮箱查询用户信息
if (user == null && isEmail) {
user = userService.selectUserByEmail(username);
}
powered by kaifamiao