implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 请求成功还是失败
+ */
+ private Boolean success;
+
+ /**
+ * 错误码
+ */
+ private String errorCode;
+
+ /**
+ * 错误消息
+ */
+ private String errorMessage;
+
+ /**
+ * 令牌
+ */
+ private String token;
+
+ public LoginResult() {
+
+ }
+
+ public LoginResult(Boolean success, String errorCode, String errorMessage, String token) {
+ this.success = success;
+ this.errorCode = errorCode;
+ this.errorMessage = errorMessage;
+ this.token = token;
+ }
+
+ /**
+ * Getter method for property success.
+ *
+ * @return property value of success
+ */
+ public Boolean getSuccess() {
+ return success;
+ }
+
+ /**
+ * Setter method for property success.
+ *
+ * @param success value to be assigned to property success
+ */
+ public void setSuccess(Boolean success) {
+ this.success = success;
+ }
+
+ /**
+ * Getter method for property errorCode.
+ *
+ * @return property value of errorCode
+ */
+ public String getErrorCode() {
+ return errorCode;
+ }
+
+ /**
+ * Setter method for property errorCode.
+ *
+ * @param errorCode value to be assigned to property errorCode
+ */
+ public void setErrorCode(String errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ /**
+ * Getter method for property errorMsg.
+ *
+ * @return property value of errorMsg
+ */
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ /**
+ * Setter method for property errorMsg.
+ *
+ * @param errorMessage value to be assigned to property errorMsg
+ */
+ public void setErrorMessage(String errorMessage) {
+ this.errorMessage = errorMessage;
+ }
+
+ public String getToken() {
+ return token;
+ }
+ public void setToken(String token) {
+ this.token = token;
+ }
+}
diff --git a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/sign/AESUtils.java b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/sign/AESUtils.java
index fcedd02..c8bcbf8 100644
--- a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/sign/AESUtils.java
+++ b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/sign/AESUtils.java
@@ -14,6 +14,9 @@ import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.apache.tomcat.util.codec.binary.Base64;
+import java.security.Security;
/**
* Description: [AES对称加密和解密]
@@ -117,6 +120,32 @@ public class AESUtils {
return null;
}
+ /**
+ * 前端使用ECB,后端解密方法
+ * @param enc
+ * @param key
+ * @return
+ */
+ public static String decrypt(String enc, String key) {
+ try{
+ SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
+ Security.addProvider(new BouncyCastleProvider());
+ Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
+ cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
+ return cipher.doFinal(Base64.decodeBase64(enc)).toString();
+ } catch (NoSuchPaddingException e) {
+ throw new RuntimeException(e);
+ } catch (IllegalBlockSizeException e) {
+ throw new RuntimeException(e);
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ } catch (BadPaddingException e) {
+ throw new RuntimeException(e);
+ } catch (InvalidKeyException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
// public static void main(String[] args) {
// try {
//
diff --git a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/model/BaseResultUtil.java b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/BaseResultUtil.java
similarity index 91%
rename from electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/model/BaseResultUtil.java
rename to electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/BaseResultUtil.java
index 76d2471..92cb311 100644
--- a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/model/BaseResultUtil.java
+++ b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/BaseResultUtil.java
@@ -1,12 +1,12 @@
-package electromagnetic.data.framework.share.model;
+package electromagnetic.data.framework.share.util;
import electromagnetic.data.framework.share.enums.ErrorEnum;
+import electromagnetic.data.framework.share.result.BaseResult;
import electromagnetic.data.framework.share.result.CallbackResult;
/**
* 返回结果转换工具类
*
- * @version $Id: DataCenterResultUtil.java, v 0.1 2021-01-11 16:57 Exp $$
*/
public class BaseResultUtil {
diff --git a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/LoginResultUtil.java b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/LoginResultUtil.java
new file mode 100644
index 0000000..5458bc6
--- /dev/null
+++ b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/LoginResultUtil.java
@@ -0,0 +1,39 @@
+package electromagnetic.data.framework.share.util;
+
+import electromagnetic.data.framework.share.enums.ErrorEnum;
+import electromagnetic.data.framework.share.result.CallbackResult;
+import electromagnetic.data.framework.share.result.LoginResult;
+
+public class LoginResultUtil {
+
+ public static LoginResult convertToResult(CallbackResult callbackResult) {
+ LoginResult LoginResult = new LoginResult<>();
+ LoginResult.setSuccess(callbackResult.isSuccess());
+ LoginResult.setErrorCode(callbackResult.getResultCode());
+ LoginResult.setErrorMessage(callbackResult.getResultMessage());
+ return LoginResult;
+ }
+
+ public static LoginResult success(String token){
+ LoginResult LoginResult = new LoginResult<>();
+ LoginResult.setSuccess(true);
+ LoginResult.setToken(token);
+ return LoginResult;
+ }
+
+ public static LoginResult fail(String code , String msg){
+ LoginResult LoginResult = new LoginResult<>();
+ LoginResult.setSuccess(false);
+ LoginResult.setErrorCode(code);
+ LoginResult.setErrorMessage(msg);
+ return LoginResult;
+ }
+
+ public static LoginResult fail(ErrorEnum errorEnum){
+ LoginResult LoginResult = new LoginResult<>();
+ LoginResult.setSuccess(false);
+ LoginResult.setErrorCode(errorEnum.getCode());
+ LoginResult.setErrorMessage(errorEnum.getErrorMessage());
+ return LoginResult;
+ }
+}
diff --git a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/facade/user/UserFacade.java b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/facade/user/UserFacade.java
index 4fc3b20..3fb052e 100644
--- a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/facade/user/UserFacade.java
+++ b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/facade/user/UserFacade.java
@@ -1,11 +1,19 @@
package com.electromagnetic.industry.software.data.manage.facade.user;
+import com.electromagnetic.industry.software.data.manage.request.user.UserLoginRequest;
import com.electromagnetic.industry.software.data.manage.request.user.UserRequest;
-import electromagnetic.data.framework.share.model.BaseResult;
-import electromagnetic.data.framework.share.model.ElectromagneticResult;
+import electromagnetic.data.framework.share.result.BaseResult;
+import electromagnetic.data.framework.share.result.LoginResult;
public interface UserFacade {
+ /**
+ * 用户登录
+ * @param loginRequest
+ * @return
+ */
+ LoginResult> login(UserLoginRequest loginRequest);
+
/**
* 新增用户信息
* @param userRequest
diff --git a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserLoginRequest.java b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserLoginRequest.java
new file mode 100644
index 0000000..654c7fb
--- /dev/null
+++ b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserLoginRequest.java
@@ -0,0 +1,20 @@
+package com.electromagnetic.industry.software.data.manage.request.user;
+
+import electromagnetic.data.framework.share.model.BaseRequest;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UserLoginRequest extends BaseRequest implements Serializable {
+
+ /**
+ * 工号
+ */
+ private String workNumber;
+
+ /**
+ * 用户密码
+ */
+ private String userPwd;
+}
diff --git a/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/dao/TokenMapper.java b/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/dao/TokenMapper.java
new file mode 100644
index 0000000..fb67a60
--- /dev/null
+++ b/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/dao/TokenMapper.java
@@ -0,0 +1,15 @@
+package com.electromagnetic.industry.software.data.manage.repository.dao;
+
+import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.Token;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface TokenMapper {
+
+ /**
+ * 插入
+ * @param token
+ * @return
+ */
+ int insert(Token token);
+}
diff --git a/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/dao/UserMapper.java b/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/dao/UserMapper.java
index c89b44a..ae6d137 100644
--- a/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/dao/UserMapper.java
+++ b/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/dao/UserMapper.java
@@ -5,10 +5,18 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
+
/**
* 插入
* @param user
* @return
*/
int insert(User user);
+
+ /**
+ * 通过工号查询用户
+ * @param workNumber
+ * @return
+ */
+ User selectUserByWorkNumber(String workNumber);
}
\ No newline at end of file
diff --git a/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/impl/TokenRepositoryImpl.java b/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/impl/TokenRepositoryImpl.java
new file mode 100644
index 0000000..af4e7b7
--- /dev/null
+++ b/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/impl/TokenRepositoryImpl.java
@@ -0,0 +1,25 @@
+package com.electromagnetic.industry.software.data.manage.repository.impl;
+
+import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.Token;
+import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.repository.TokenRepository;
+import com.electromagnetic.industry.software.data.manage.repository.dao.TokenMapper;
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.Resource;
+
+@Repository
+public class TokenRepositoryImpl implements TokenRepository {
+
+ @Resource
+ TokenMapper tokenMapper;
+
+ /**
+ * 令牌插入
+ * @param token
+ * @return
+ */
+ @Override
+ public int insert(Token token){
+ return tokenMapper.insert(token);
+ }
+}
diff --git a/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/impl/UserRepositoryImpl.java b/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/impl/UserRepositoryImpl.java
index 59d4410..36958fa 100644
--- a/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/impl/UserRepositoryImpl.java
+++ b/infrastructure/repository/src/main/java/com/electromagnetic/industry/software/data/manage/repository/impl/UserRepositoryImpl.java
@@ -26,4 +26,14 @@ public class UserRepositoryImpl implements UserRepository {
public int insert(User user) {
return userMapper.insert(user);
}
+
+ /**
+ * 通过工号查询用户
+ * @param workNumber
+ * @return
+ */
+ @Override
+ public User selectUserByWorkNumber(String workNumber) {
+ return userMapper.selectUserByWorkNumber(workNumber);
+ }
}
\ No newline at end of file
diff --git a/infrastructure/repository/src/main/resources/sqlmapper/TokenMapper.xml b/infrastructure/repository/src/main/resources/sqlmapper/TokenMapper.xml
new file mode 100644
index 0000000..0ab10d0
--- /dev/null
+++ b/infrastructure/repository/src/main/resources/sqlmapper/TokenMapper.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into tokens(
+ user_id,
+ token,
+ is_long_term,
+ created_at,
+ expire_at
+ )
+ values (
+ #{userId},
+ #{token},
+ 0,
+ now(),
+ #{expireAt}
+ )
+
+
\ No newline at end of file
diff --git a/infrastructure/repository/src/main/resources/sqlmapper/UserMapper.xml b/infrastructure/repository/src/main/resources/sqlmapper/UserMapper.xml
index 9aec6ea..1780886 100644
--- a/infrastructure/repository/src/main/resources/sqlmapper/UserMapper.xml
+++ b/infrastructure/repository/src/main/resources/sqlmapper/UserMapper.xml
@@ -24,6 +24,13 @@
+
+ select user_id, user_name, work_number, mobile, user_dept, user_title, user_pwd,
+ join_time, is_published, salt, user_status, internship_end_date,
+ creator, creator_name, gmt_create, modifier, modifier_name, gmt_modified, effect_flag
+ from ed_users
+
+
insert into ed_users(
user_id,
@@ -61,4 +68,9 @@
1
)
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index c914ac9..a309f07 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,7 @@
2.0.1.Final
6.0.18.Final
1.0.2.1-SNAPSHOT
+ 0.9.0
@@ -239,6 +240,17 @@
hibernate-validator
${hibernate.validator.version}
+
+
+ io.jsonwebtoken
+ jjwt
+ ${jwt.version}
+
+
+ org.bouncycastle
+ bcprov-jdk16
+ 1.46
+
diff --git a/service/pom.xml b/service/pom.xml
index 413ddd2..595bedf 100644
--- a/service/pom.xml
+++ b/service/pom.xml
@@ -41,6 +41,10 @@
org.apache.commons
commons-lang3
-
+
+ org.bouncycastle
+ bcprov-jdk16
+ 1.46
+
diff --git a/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/user/UserFacadeImpl.java b/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/user/UserFacadeImpl.java
index 33a58bb..fe90f01 100644
--- a/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/user/UserFacadeImpl.java
+++ b/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/user/UserFacadeImpl.java
@@ -1,14 +1,22 @@
package com.electromagnetic.industry.software.data.manage.service.facade.user;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.User;
+import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.UserLoginInfo;
+import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service.TokenService;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service.UserService;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.util.UserConstant;
import com.electromagnetic.industry.software.data.manage.facade.user.UserFacade;
+import com.electromagnetic.industry.software.data.manage.request.user.UserLoginRequest;
import com.electromagnetic.industry.software.data.manage.request.user.UserRequest;
import com.electromagnetic.industry.software.data.manage.service.mappers.UserMappers;
import electromagnetic.data.framework.share.id.IdWorker;
-import electromagnetic.data.framework.share.model.BaseResult;
-import electromagnetic.data.framework.share.model.BaseResultUtil;
+import electromagnetic.data.framework.share.result.BaseResult;
+import electromagnetic.data.framework.share.result.LoginResult;
+import electromagnetic.data.framework.share.sign.AESUtils;
+import electromagnetic.data.framework.share.util.BaseResultUtil;
+import electromagnetic.data.framework.share.util.LoginResultUtil;
+import electromagnetic.data.framework.share.util.SignUtils;
+import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -18,6 +26,26 @@ public class UserFacadeImpl implements UserFacade {
@Resource
private UserService userService;
+ @Resource
+ private TokenService tokenService;
+
+ /**
+ * 用户登录
+ * @param loginRequest
+ * @return
+ */
+ @Override
+ public LoginResult login(UserLoginRequest loginRequest) {
+ UserLoginInfo info = UserMappers.INSTANCE.getUserLoginRequestToModel(loginRequest);
+ String decodePwd = AESUtils.decrypt(info.getUserPwd(), UserConstant.SECRET_KEY);
+ User user = userService.getUserByWorkNumber(info.getWorkNumber());
+ if (user==null || userService.matchPassword(user, decodePwd)) {
+ String tokenStr = tokenService.createToken(info);
+ tokenService.createUserToken(user, tokenStr);
+ return LoginResultUtil.success(tokenStr);
+ }
+ return LoginResultUtil.fail("500","用户不存在/密码错误");
+ }
/**
* 新增用户信息
@@ -27,8 +55,9 @@ public class UserFacadeImpl implements UserFacade {
@Override
public BaseResult createUser(UserRequest userRequest){
User user = UserMappers.INSTANCE.getUserRequestToModel(userRequest);
+ user.setSalt(RandomStringUtils.randomAlphanumeric(16));
user.setUserId(IdWorker.getSnowFlakeIdString());
- user.setUserPwd(UserConstant.DEFAULT_PASSWORD);
+ user.setUserPwd(SignUtils.MD5(UserConstant.DEFAULT_PASSWORD+user.getSalt()));
user.setIsPublished(UserConstant.DEFAULT_PUBLISH_STATUS);
return BaseResultUtil.success(userService.createUser(user));
}
diff --git a/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/mappers/UserMappers.java b/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/mappers/UserMappers.java
index 11a915e..dcf4ac9 100644
--- a/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/mappers/UserMappers.java
+++ b/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/mappers/UserMappers.java
@@ -4,6 +4,8 @@
package com.electromagnetic.industry.software.data.manage.service.mappers;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.User;
+import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.UserLoginInfo;
+import com.electromagnetic.industry.software.data.manage.request.user.UserLoginRequest;
import com.electromagnetic.industry.software.data.manage.request.user.UserRequest;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@@ -25,4 +27,10 @@ public interface UserMappers {
*/
User getUserRequestToModel(UserRequest userRequest);
+ /**
+ * 用户登录Request转用户登录模型
+ * @param loginRequest
+ * @return
+ */
+ UserLoginInfo getUserLoginRequestToModel(UserLoginRequest loginRequest);
}
\ No newline at end of file