From 0a4e55b1cbeb7b81dfa51ebcee2ce83f303dad91 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期日, 28 九月 2025 18:43:04 +0800 Subject: [PATCH] app用户登录,后台用户登录 --- ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java | 82 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 81 insertions(+), 1 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index f4b8a03..0851e7c 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -1,10 +1,12 @@ package com.ruoyi.framework.web.service; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.domain.model.LoginUserApplet; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.UserStatus; import com.ruoyi.common.exception.ServiceException; @@ -16,8 +18,10 @@ import com.ruoyi.framework.manager.AsyncManager; import com.ruoyi.framework.manager.factory.AsyncFactory; import com.ruoyi.framework.security.context.AuthenticationContextHolder; +import com.ruoyi.system.model.TAppUser; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.TAppUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; @@ -53,6 +57,8 @@ private ISysConfigService configService; @Autowired private SysPermissionService permissionService; + @Autowired + private TAppUserService appUserService; /** * 登录验证 @@ -85,7 +91,8 @@ } try { - UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + String userName = username + "_1"; + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userName, password); AuthenticationContextHolder.setContext(authenticationToken); // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername authentication = authenticationManager.authenticate(authenticationToken); @@ -110,6 +117,66 @@ AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); recordLoginInfo(loginUser.getUserId()); + // 生成token + return loginUser; + } + + /** + * 登录验证 + * + * @param account 用户名 + * @param password 密码 + * @return 结果 + */ + public LoginUserApplet loginCodeApplet(String account, String password) + { + // 登录前置校验 + if (StringUtils.isEmpty(account)){ + AsyncManager.me().execute(AsyncFactory.recordLogininfor(account, Constants.LOGIN_FAIL, MessageUtils.message("not.null"))); + throw new UserNotExistsException(); + } + // 用户验证 + Authentication authentication = null; + // 用户验证 + TAppUser appUser = appUserService.getOne(Wrappers.<TAppUser>lambdaQuery().eq(TAppUser::getAccount,account)); + if (StringUtils.isNull(appUser)){ + log.info("登录用户:{} 不存在.", account); + throw new ServiceException(MessageUtils.message("user.not.exists")); + } else if (appUser.getDisabled()) { + log.info("登录用户:{} 已被删除.", account); + throw new ServiceException(MessageUtils.message("user.password.delete")); + } else if (2 == appUser.getStatus()) { + log.info("登录用户:{} 已被停用.", account); + throw new ServiceException(MessageUtils.message("user.blocked")); + } + try + { + String userName = account + "_2"; + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userName, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } + catch (Exception e) + { + if (e instanceof BadCredentialsException) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(account, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(account, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(account, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUserApplet loginUser = (LoginUserApplet) authentication.getPrincipal(); + recordAppLoginInfo(loginUser.getUserId()); // 生成token return loginUser; } @@ -236,4 +303,17 @@ sysUser.setLoginDate(DateUtils.getNowDate()); userService.updateUserProfile(sysUser); } + /** + * 记录登录信息 + * + * @param userId 用户ID + */ + public void recordAppLoginInfo(String userId) + { + TAppUser appUser = new TAppUser(); + appUser.setId(userId); +// sysUser.setLoginIp(IpUtils.getIpAddr()); +// sysUser.setLoginDate(DateUtils.getNowDate()); +// userService.updateUserProfile(sysUser); + } } -- Gitblit v1.7.1