浏览代码

验证用户名和密码接口

fangqing 19 小时之前
父节点
当前提交
f490ba6a76

+ 17 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -1,6 +1,7 @@
 package com.ruoyi.web.controller.system;
 
 import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.annotation.Anonymous;
 import com.ruoyi.common.config.WxAppConfig;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -64,6 +65,22 @@ public class SysLoginController {
         return ajax;
     }
 
+    /**
+     * OPPO 青少年模式验证
+     *
+     * @param loginBody 登录信息
+     * @return 结果
+     */
+    @PostMapping("/verifyLogin")
+    @Anonymous
+    public AjaxResult verifyLogin(@RequestBody LoginBody loginBody) {
+        // 生成令牌
+        Boolean isLogin = loginService.verifyLogin(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+                loginBody.getUuid(), false);
+        return AjaxResult.success(isLogin);
+    }
+
+
     @Autowired
     private WxAppConfig wxAppConfig;
 

+ 40 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -108,6 +108,46 @@ public class SysLoginService {
         return tokenService.createToken(loginUser);
     }
 
+    /**
+     * OPPO 青少年模式验证
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @param code     验证码
+     * @param uuid     唯一标识
+     * @return 结果
+     */
+    public Boolean verifyLogin(String username, String password, String code, String uuid, boolean isCommunity) {
+        // 验证码校验
+        validateCaptcha(username, code, uuid);
+        // 登录前置校验
+        loginPreCheck(username, password);
+        // 用户验证
+        Authentication authentication = null;
+        Boolean isLogin = false;
+
+        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")));
+                return isLogin;
+            } else {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                return isLogin;
+            }
+        } finally {
+            AuthenticationContextHolder.clearContext();
+        }
+        isLogin = true;
+        // 生成token
+        return isLogin;
+    }
+
+
     /**
      * 微信登录
      *