From 553c29ab8a46c9a07e3657fdd36a81a6bfde1afe Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期四, 23 九月 2021 19:13:58 +0800 Subject: [PATCH] update 整合 satoken 权限、鉴权一体化框架 --- ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java | 65 ++++++++++++++------------------ 1 files changed, 29 insertions(+), 36 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index 886537f..6bee29f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -1,26 +1,20 @@ package com.ruoyi.system.service; +import cn.dev33.satoken.stp.StpUtil; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.service.LogininforService; -import com.ruoyi.common.core.service.TokenService; +import com.ruoyi.common.enums.UserStatus; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.user.CaptchaException; import com.ruoyi.common.exception.user.CaptchaExpireException; import com.ruoyi.common.exception.user.UserPasswordNotMatchException; -import com.ruoyi.common.utils.DateUtils; -import com.ruoyi.common.utils.MessageUtils; -import com.ruoyi.common.utils.RedisUtils; -import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.*; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; /** @@ -28,14 +22,10 @@ * * @author ruoyi */ +@Slf4j @Component public class SysLoginService { - @Autowired - private TokenService tokenService; - - @Resource - private AuthenticationManager authenticationManager; @Autowired private ISysUserService userService; @@ -64,32 +54,35 @@ { validateCaptcha(username, code, uuid, request); } - // 鐢ㄦ埛楠岃瘉 - Authentication authentication = null; - try + SysUser user = userService.selectUserByUserName(username); + if (StringUtils.isNull(user)) { - // 璇ユ柟娉曚細鍘昏皟鐢║serDetailsServiceImpl.loadUserByUsername - authentication = authenticationManager - .authenticate(new UsernamePasswordAuthenticationToken(username, password)); + log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", username); + throw new ServiceException("鐧诲綍鐢ㄦ埛锛�" + username + " 涓嶅瓨鍦�"); } - catch (Exception e) + else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { - if (e instanceof BadCredentialsException) - { - asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"), request); - throw new UserPasswordNotMatchException(); - } - else - { - asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage(), request); - throw new ServiceException(e.getMessage()); - } + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍒犻櫎.", username); + throw new ServiceException("瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿锛�" + username + " 宸茶鍒犻櫎"); } + else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", username); + throw new ServiceException("瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿锛�" + username + " 宸插仠鐢�"); + } + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + String encodePassword = passwordEncoder.encode(password); + if (SecurityUtils.matchesPassword(user.getPassword(), encodePassword)) + { + asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"), request); + throw new UserPasswordNotMatchException(); + } + asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request); - LoginUser loginUser = (LoginUser) authentication.getPrincipal(); - recordLoginInfo(loginUser.getUser()); + recordLoginInfo(user); // 鐢熸垚token - return tokenService.createToken(loginUser); + StpUtil.login(user.getUserId(), "PC"); + return StpUtil.getTokenValue(); } /** -- Gitblit v1.9.3