diff --git a/doc/db/so-im.chnr.json b/doc/db/so-im.chnr.json index db76a61..a61a7f9 100644 --- a/doc/db/so-im.chnr.json +++ b/doc/db/so-im.chnr.json @@ -4,7 +4,7 @@ "avatar": "", "version": "3.5.7", "createdTime": "2022-3-7 15:11:08", - "updatedTime": "2022-4-14 16:00:46", + "updatedTime": "2022-4-20 23:20:02", "profile": { "default": { "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", @@ -1026,7 +1026,27 @@ } ], "correlations": [], - "indexes": [] + "indexes": [ + { + "defKey": "idx_account_status", + "defName": null, + "unique": false, + "comment": "", + "fields": [ + { + "fieldDefKey": "BB5539DD-5A96-4729-AF84-205D99479F51", + "ascOrDesc": "A", + "id": "C8BEC04D-D87C-45DE-97C5-D03C3B7A2EB9" + }, + { + "fieldDefKey": "ED141994-B3F8-42C8-96AE-91244E115A35", + "ascOrDesc": "A", + "id": "FF7AA195-A640-4E60-B12D-6DDDD562C758" + } + ], + "id": "359FE803-740A-4200-A215-525BED9E9761" + } + ] }, { "id": "E79C9C4C-FFC3-44BB-BD98-4F44F528B4B8", diff --git a/im-common/src/main/java/net/sopod/soim/common/constant/Consts.java b/im-common/src/main/java/net/sopod/soim/common/constant/Consts.java index 90a8421..a50a0b9 100644 --- a/im-common/src/main/java/net/sopod/soim/common/constant/Consts.java +++ b/im-common/src/main/java/net/sopod/soim/common/constant/Consts.java @@ -1,11 +1,11 @@ package net.sopod.soim.common.constant; -public class Consts { +public interface Consts { - public static int KB = 1024; + int KB = 1024; - public static int MB = KB * KB; + int MB = KB * KB; - public static int GB = KB * MB; + int GB = KB * MB; } diff --git a/im-common/src/main/java/net/sopod/soim/common/constant/LogicConsts.java b/im-common/src/main/java/net/sopod/soim/common/constant/LogicConsts.java new file mode 100644 index 0000000..7b3c81e --- /dev/null +++ b/im-common/src/main/java/net/sopod/soim/common/constant/LogicConsts.java @@ -0,0 +1,17 @@ +package net.sopod.soim.common.constant; + +/** + * LogicConsts + * + * @author tmy + * @date 2022-04-20 22:19 + */ +public interface LogicConsts { + + Integer STATUS_NORMAL = 1; + + Integer STATUS_DISABLED = 2; + + Integer STATUS_DELETED = 3; + +} diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java index 78630a6..d9bdd80 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java +++ b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.experimental.Accessors; import net.sopod.soim.das.user.api.config.LogicTables; +import java.io.Serializable; import java.util.Date; /** @@ -19,7 +20,9 @@ import java.util.Date; @Data @Accessors(chain = true) @TableName(LogicTables.IM_USER) -public class ImUser { +public class ImUser implements Serializable { + + private static final long serialVersionUID = -5647990265689699268L; /** id */ @TableId(value = "id", type= IdType.INPUT) diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDasService.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDasService.java index 182d7bc..42e781f 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDasService.java +++ b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDasService.java @@ -12,6 +12,6 @@ public interface UserDasService { ImUser getUserById(Long id); - ImUser getUserByAccount(String account); + ImUser getNormalUserByAccount(String account); } diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasServiceImpl.java b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasServiceImpl.java index 0987734..c7146ab 100644 --- a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasServiceImpl.java +++ b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasServiceImpl.java @@ -3,6 +3,7 @@ package net.sopod.soim.das.user.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.AllArgsConstructor; +import net.sopod.soim.common.constant.LogicConsts; import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.service.UserDasService; import net.sopod.soim.das.user.dao.UserMapper; @@ -26,9 +27,10 @@ public class UserDasServiceImpl implements UserDasService { } @Override - public ImUser getUserByAccount(String account) { + public ImUser getNormalUserByAccount(String account) { LambdaQueryWrapper accountQuery = new QueryWrapper().lambda() - .eq(ImUser::getAccount, account); + .eq(ImUser::getAccount, account) + .eq(ImUser::getStatus, LogicConsts.STATUS_NORMAL); return userMapper.selectOne(accountQuery); } diff --git a/im-das/im-das-user/src/main/resources/application.yml b/im-das/im-das-user/src/main/resources/application.yml index ec713f7..e470e3f 100644 --- a/im-das/im-das-user/src/main/resources/application.yml +++ b/im-das/im-das-user/src/main/resources/application.yml @@ -16,6 +16,8 @@ dubbo: group: im-user protocol: port: 3011 + consumer: + check: false mybatis-plus: mapper-locations: classpath:mapper/*.xml diff --git a/im-entry-http/src/main/java/net/sopod/soim/entry/http/controller/AuthController.java b/im-entry-http/src/main/java/net/sopod/soim/entry/http/controller/AuthController.java index 326c559..2aec0e7 100644 --- a/im-entry-http/src/main/java/net/sopod/soim/entry/http/controller/AuthController.java +++ b/im-entry-http/src/main/java/net/sopod/soim/entry/http/controller/AuthController.java @@ -2,7 +2,7 @@ package net.sopod.soim.entry.http.controller; import net.sopod.soim.entry.http.model.ao.PwdAuthAO; import net.sopod.soim.logic.user.auth.model.ImAuth; -import net.sopod.soim.logic.user.service.UserAuthService; +import net.sopod.soim.logic.user.auth.service.UserAuthService; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -24,9 +24,7 @@ public class AuthController { @PostMapping("/pwdAuth") public ImAuth pwdAuth(@RequestBody PwdAuthAO authAO) { - ImAuth imAuth = userAuthService.pwdAuth(authAO.getAccount(), authAO.getPassword()); - String accessToken = imAuth.getAccessToken(); - return imAuth; + return userAuthService.pwdAuth(authAO.getAccount(), authAO.getPassword()); } } diff --git a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java index 01e7fca..3f65158 100644 --- a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java +++ b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java @@ -1,6 +1,9 @@ package net.sopod.soim.logic.user.auth.model; import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; /** * LoginParam @@ -9,10 +12,17 @@ import lombok.Data; * @date 2022-03-31 21:06 */ @Data -public class ImAuth { +@Accessors(chain = true) +public class ImAuth implements Serializable { + + private static final long serialVersionUID = 879498316013292363L; - private String accessToken; + private boolean success; + + private String authToken; private long expireMs; + private String message; + } diff --git a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/AuthService.java b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/AuthService.java deleted file mode 100644 index 621a31e..0000000 --- a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/AuthService.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.sopod.soim.logic.user.auth.service; - -import net.sopod.soim.logic.user.auth.model.ImAuth; - -/** - * AuthService - * - * @author tmy - * @date 2022-03-31 21:03 - */ -public interface AuthService { - - /** - * 登录请求 - */ - void login(ImAuth imAuth); - -} diff --git a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserAuthService.java b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/UserAuthService.java similarity index 81% rename from im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserAuthService.java rename to im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/UserAuthService.java index 1023b47..7b91ffb 100644 --- a/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserAuthService.java +++ b/im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/UserAuthService.java @@ -1,4 +1,4 @@ -package net.sopod.soim.logic.user.service; +package net.sopod.soim.logic.user.auth.service; import net.sopod.soim.logic.user.auth.model.ImAuth; diff --git a/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/AuthStoreService.java b/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/AuthStoreService.java index 225f534..55c5754 100644 --- a/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/AuthStoreService.java +++ b/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/AuthStoreService.java @@ -10,6 +10,6 @@ import net.sopod.soim.router.api.model.CacheRes; */ public interface AuthStoreService { - CacheRes cacheToken(Long userId, String token); + CacheRes storageToken(Long userId, String token, Long expireMs); } diff --git a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/LogicUserApplication.java b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/LogicUserApplication.java index a77cd66..ec1ad56 100644 --- a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/LogicUserApplication.java +++ b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/LogicUserApplication.java @@ -3,6 +3,7 @@ package net.sopod.soim.logic.user; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; /** * UserMain @@ -11,6 +12,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @date 2022-03-26 01:41 */ @EnableDubbo(scanBasePackages = {"net.sopod.soim.logic.user.service"}) +@EnableConfigurationProperties @SpringBootApplication public class LogicUserApplication { diff --git a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/config/AuthConfig.java b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/config/AuthConfig.java new file mode 100644 index 0000000..f8ee049 --- /dev/null +++ b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/config/AuthConfig.java @@ -0,0 +1,23 @@ +package net.sopod.soim.logic.user.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +/** + * AuthConfig + * + * @author tmy + * @date 2022-04-20 22:29 + */ +@Component +@ConfigurationProperties(prefix = "auth") +@Data +public class AuthConfig { + + /** 登录token过期时间(秒) */ + private Integer authTokenExpire = 3 * 60; + +} diff --git a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java index d9aa9f7..aa37414 100644 --- a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java +++ b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java @@ -1,12 +1,20 @@ package net.sopod.soim.logic.user.service; +import net.sopod.soim.common.util.ImClock; +import net.sopod.soim.common.util.StringUtil; +import net.sopod.soim.common.util.TokenUtil; import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.service.UserDasService; import net.sopod.soim.logic.user.auth.model.ImAuth; +import net.sopod.soim.logic.user.auth.service.UserAuthService; +import net.sopod.soim.logic.user.config.AuthConfig; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.util.StringUtils; -import java.util.concurrent.CompletableFuture; +import javax.annotation.Resource; +import java.util.Objects; +import java.util.concurrent.TimeUnit; /** * AuthServiceImpl @@ -20,14 +28,25 @@ public class UserAuthServiceImpl implements UserAuthService { @DubboReference private UserDasService userDasService; + @Resource + private AuthConfig authConfig; + @Override public ImAuth pwdAuth(String account, String password) { - ImUser imUser = userDasService.getUserByAccount(account); + ImUser imUser = userDasService.getNormalUserByAccount(account); if (imUser == null) { - return null; + return new ImAuth().setSuccess(false).setMessage("账号不存在"); + } + if (StringUtils.isEmpty(imUser.getPassword()) + || !Objects.equals(imUser.getPassword(), password)) { + return new ImAuth().setSuccess(false).setMessage("密码有误"); } - // TODO status, - return null; + String token = TokenUtil.genToken(imUser.getId()); + return new ImAuth() + .setSuccess(true) + .setAuthToken(token) + .setExpireMs(ImClock.millis() + + TimeUnit.SECONDS.toMillis(authConfig.getAuthTokenExpire())); } } diff --git a/im-service/im-router/src/main/java/net/sopod/soim/router/service/AuthStoreServiceImpl.java b/im-service/im-router/src/main/java/net/sopod/soim/router/service/AuthStoreServiceImpl.java index eb9178f..b32d066 100644 --- a/im-service/im-router/src/main/java/net/sopod/soim/router/service/AuthStoreServiceImpl.java +++ b/im-service/im-router/src/main/java/net/sopod/soim/router/service/AuthStoreServiceImpl.java @@ -23,7 +23,7 @@ public class AuthStoreServiceImpl implements AuthStoreService { } @Override - public CacheRes cacheToken(Long userId, String token) { + public CacheRes storageToken(Long userId, String token, Long expireMs) { // 从内存中获取 tokenStore.put(userId, token);