diff --git a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java index fda482cf9..8b16ebf99 100644 --- a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java +++ b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java @@ -64,4 +64,12 @@ public class LoginUser implements Serializable { @ChineseDescription("用户的token") private String token; + public LoginUser() { + } + + public LoginUser(Long userId, String token) { + this.userId = userId; + this.token = token; + } + } diff --git a/kernel-d-auth/auth-sdk/pom.xml b/kernel-d-auth/auth-sdk/pom.xml index 20d60f718..1c091c806 100644 --- a/kernel-d-auth/auth-sdk/pom.xml +++ b/kernel-d-auth/auth-sdk/pom.xml @@ -24,6 +24,14 @@ ${roses.version} + + + + cn.stylefeng.roses + log-api + ${roses.version} + + diff --git a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java index 59d3a008a..bbd304e56 100644 --- a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java +++ b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java @@ -75,9 +75,9 @@ import cn.stylefeng.roses.kernel.scanner.api.holder.InitScanFlagHolder; import cn.stylefeng.roses.kernel.security.api.DragCaptchaApi; import cn.stylefeng.roses.kernel.security.api.ImageCaptchaApi; import cn.stylefeng.roses.kernel.security.api.expander.SecurityConfigExpander; -import cn.stylefeng.roses.kernel.system.api.UserServiceApi; -import cn.stylefeng.roses.kernel.system.api.enums.UserStatusEnum; -import cn.stylefeng.roses.kernel.system.api.pojo.user.UserLoginInfoDTO; +import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi; +import cn.stylefeng.roses.kernel.sys.api.enums.user.UserStatusEnum; +import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserValidateDTO; import cn.stylefeng.roses.kernel.validator.api.exception.enums.ValidatorExceptionEnum; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -85,7 +85,6 @@ import io.jsonwebtoken.Claims; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -102,7 +101,7 @@ import static cn.stylefeng.roses.kernel.auth.api.exception.enums.AuthExceptionEn public class AuthServiceImpl implements AuthServiceApi { @Resource - private UserServiceApi userServiceApi; + private SysUserServiceApi sysUserServiceApi; @Resource private SessionManagerApi sessionManagerApi; @@ -400,7 +399,7 @@ public class AuthServiceImpl implements AuthServiceApi { } // 5. 获取用户密码的加密值和用户的状态 - UserLoginInfoDTO userValidateInfo = userServiceApi.getUserLoginInfo(loginRequest.getAccount()); + UserValidateDTO userValidateInfo = sysUserServiceApi.getUserLoginValidateDTO(loginRequest.getAccount()); // 6. 校验用户密码是否正确 validateUserPassword(validatePassword, loginErrorCount, loginRequest, userValidateInfo); @@ -410,21 +409,15 @@ public class AuthServiceImpl implements AuthServiceApi { throw new AuthException(AuthExceptionEnum.USER_STATUS_ERROR, UserStatusEnum.getCodeMessage(userValidateInfo.getUserStatus())); } - // 8. 获取LoginUser,用于用户的缓存 - LoginUser loginUser = userValidateInfo.getLoginUser(); - - // 9. 生成用户的token - DefaultJwtPayload defaultJwtPayload = new DefaultJwtPayload(loginUser.getUserId(), loginUser.getAccount(), loginRequest.getRememberMe(), caToken, loginRequest.getTenantCode()); + // 8. 生成用户的token + DefaultJwtPayload defaultJwtPayload = new DefaultJwtPayload(userValidateInfo.getUserId(), loginRequest.getAccount(), + loginRequest.getRememberMe(), caToken, loginRequest.getTenantCode()); String jwtToken = AuthJwtContext.me().generateTokenDefaultPayload(defaultJwtPayload); - loginUser.setToken(jwtToken); - // 如果包含租户编码,则放到loginUser中 - loginUser.setTenantCode(loginRequest.getTenantCode()); + // 9. 创建loginUser对象 + LoginUser loginUser = new LoginUser(userValidateInfo.getUserId(), jwtToken); - synchronized (loginUser.getAccount().intern()) { - - // 9.1 获取ws-url 保存到用户信息中 - loginUser.setWsUrl(WebSocketConfigExpander.getWebSocketWsUrl()); + synchronized (loginRequest.getAccount().intern()) { // 10. 缓存用户信息,创建会话 sessionManagerApi.createSession(jwtToken, loginUser); @@ -439,7 +432,7 @@ public class AuthServiceImpl implements AuthServiceApi { if (!DemoConfigExpander.getDemoEnvFlag()) { // 12. 更新用户登录时间和ip String ip = HttpServletUtil.getRequestClientIp(HttpServletUtil.getRequest()); - userServiceApi.updateUserLoginInfo(loginUser.getUserId(), new Date(), ip); + sysUserServiceApi.updateUserLoginInfo(loginUser.getUserId(), ip); // 13.登录成功日志 loginLogServiceApi.loginSuccess(loginUser.getUserId()); @@ -449,7 +442,7 @@ public class AuthServiceImpl implements AuthServiceApi { this.cancelFreeze(loginRequest); // 14. 组装返回结果 - return new LoginResponse(loginUser, jwtToken, defaultJwtPayload.getExpirationDate()); + return new LoginResponse(loginUser.getUserId(), jwtToken); } /** @@ -498,11 +491,13 @@ public class AuthServiceImpl implements AuthServiceApi { * @author fengshuonan * @since 2022/3/26 14:16 */ - private void validateUserPassword(Boolean validatePassword, Integer loginErrorCount, LoginRequest loginRequest, UserLoginInfoDTO userValidateInfo) { + private void validateUserPassword(Boolean validatePassword, Integer loginErrorCount, LoginRequest loginRequest, + UserValidateDTO userValidateInfo) { // 如果本次登录需要校验密码 if (validatePassword) { - Boolean checkResult = passwordStoredEncryptApi.checkPassword(loginRequest.getPassword(), userValidateInfo.getUserPasswordHexed()); + Boolean checkResult = passwordStoredEncryptApi.checkPassword(loginRequest.getPassword(), + userValidateInfo.getUserPasswordHexed()); // 校验用户表密码是否正确,如果正确则直接返回 if (checkResult) { @@ -514,7 +509,7 @@ public class AuthServiceImpl implements AuthServiceApi { try { tempSecretApi = SpringUtil.getBean(TempSecretApi.class); if (tempSecretApi != null) { - String userTempSecretKey = tempSecretApi.getUserTempSecretKey(userValidateInfo.getLoginUser().getUserId()); + String userTempSecretKey = tempSecretApi.getUserTempSecretKey(userValidateInfo.getUserId()); // 如果用户有临时秘钥,则校验秘钥是否正确 if (StrUtil.isNotBlank(userTempSecretKey)) { Boolean checkTempKeyResult = passwordStoredEncryptApi.checkPassword(loginRequest.getPassword(), userTempSecretKey);