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);
+ }
+
/**
* 校验验证码
*