在实际业务需求中,登录功能,可能不只是简单的通过用户+密码的方式进行登录,有时候需要实现用户可以通过手机号,邮箱,用户名等方式进行登录。
在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