From 778290edbdf6fee68ac1fd2d1f87e7ad2ff41a43 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Mon, 26 Jan 2026 16:01:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- loan-rate-pricing/pom.xml | 4 ++ .../controller/LoanRatePricingController.java | 23 +++++++ .../web/service/SysLoginService.java | 67 +++++++++++++++---- 3 files changed, 82 insertions(+), 12 deletions(-) diff --git a/loan-rate-pricing/pom.xml b/loan-rate-pricing/pom.xml index 5c07ae1..8cb079f 100644 --- a/loan-rate-pricing/pom.xml +++ b/loan-rate-pricing/pom.xml @@ -28,6 +28,10 @@ com.ruoyi ruoyi-common + + com.ruoyi + ruoyi-framework + \ No newline at end of file diff --git a/loan-rate-pricing/src/main/java/com/ruoyi/loanratepricing/controller/LoanRatePricingController.java b/loan-rate-pricing/src/main/java/com/ruoyi/loanratepricing/controller/LoanRatePricingController.java index 3d7d592..6475d9d 100644 --- a/loan-rate-pricing/src/main/java/com/ruoyi/loanratepricing/controller/LoanRatePricingController.java +++ b/loan-rate-pricing/src/main/java/com/ruoyi/loanratepricing/controller/LoanRatePricingController.java @@ -2,8 +2,12 @@ package com.ruoyi.loanratepricing.controller; import com.ruoyi.common.annotation.Anonymous; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.domain.model.LoginBody; +import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.loanratepricing.domain.dto.FinalRateAdjustDTO; import com.ruoyi.loanratepricing.domain.dto.FinalRateSubmitDTO; import com.ruoyi.loanratepricing.domain.dto.OptInvokeDTO; @@ -31,6 +35,9 @@ public class LoanRatePricingController extends BaseController { @Resource private RatePricingService ratePricingService; + @Resource + private SysLoginService loginService; + @ApiOperation("发起利率定价申请,或加载利率定价申请") @Anonymous @PostMapping("/load") @@ -52,6 +59,22 @@ public class LoanRatePricingController extends BaseController { return R.ok(ratePricingService.submitFinalRate(finalRateSubmitDTO)); } + /** + * 登录方法 + * + * @param loginBody 登录信息 + * @return 结果 + */ + @PostMapping("/login") + @ApiOperation("登录") + public AjaxResult login(@RequestBody LoginBody loginBody) + { + AjaxResult ajax = AjaxResult.success(); + // 生成令牌 + String token = loginService.loginWithoutCaptcha(loginBody.getUsername(), loginBody.getPassword()); + ajax.put(Constants.TOKEN, token); + return ajax; + } } 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 fe16427..56e6dd2 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,12 +1,5 @@ package com.ruoyi.framework.web.service; -import javax.annotation.Resource; -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.stereotype.Component; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; @@ -14,11 +7,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.exception.user.BlackListException; -import com.ruoyi.common.exception.user.CaptchaException; -import com.ruoyi.common.exception.user.CaptchaExpireException; -import com.ruoyi.common.exception.user.UserNotExistsException; -import com.ruoyi.common.exception.user.UserPasswordNotMatchException; +import com.ruoyi.common.exception.user.*; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.StringUtils; @@ -28,6 +17,14 @@ import com.ruoyi.framework.manager.factory.AsyncFactory; import com.ruoyi.framework.security.context.AuthenticationContextHolder; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserService; +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.stereotype.Component; + +import javax.annotation.Resource; /** * 登录校验方法 @@ -100,6 +97,52 @@ public class SysLoginService return tokenService.createToken(loginUser); } + /** + * 登录验证 + * + * @param username 用户名 + * @param password 密码 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public String loginWithoutCaptcha(String username, String password) + { + // 登录前置校验 + loginPreCheck(username, password); + // 用户验证 + Authentication authentication = null; + try + { + 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(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + // 生成token + return tokenService.createToken(loginUser); + } + /** * 校验验证码 *