用户登录功能
This commit is contained in:
parent
3b08ca0f80
commit
006165ca80
|
|
@ -1,9 +1,10 @@
|
||||||
package com.electromagnetic.industry.software.data.manage.controller.user;
|
package com.electromagnetic.industry.software.data.manage.controller.user;
|
||||||
|
|
||||||
import com.electromagnetic.industry.software.data.manage.facade.user.UserFacade;
|
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.request.user.UserRequest;
|
||||||
import electromagnetic.data.framework.share.model.BaseResult;
|
import electromagnetic.data.framework.share.result.BaseResult;
|
||||||
import electromagnetic.data.framework.share.model.ElectromagneticResult;
|
import electromagnetic.data.framework.share.result.LoginResult;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
|
@ -16,6 +17,12 @@ public class UserController {
|
||||||
@Resource
|
@Resource
|
||||||
private UserFacade userFacade;
|
private UserFacade userFacade;
|
||||||
|
|
||||||
|
@ApiOperation(value = "登录", notes = "")
|
||||||
|
@PostMapping("/login")
|
||||||
|
public LoginResult<?> login(@RequestBody UserLoginRequest loginRequest) {
|
||||||
|
return userFacade.login(loginRequest);
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "新增用户信息", notes = "")
|
@ApiOperation(value = "新增用户信息", notes = "")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public BaseResult<?> createUser(@RequestBody UserRequest userRequest) {
|
public BaseResult<?> createUser(@RequestBody UserRequest userRequest) {
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,11 @@
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--Token生成与解析-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Token {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户编码
|
||||||
|
*/
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 令牌
|
||||||
|
*/
|
||||||
|
private String token;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是长期令牌
|
||||||
|
*/
|
||||||
|
private int isLongTerm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private DateTime createdAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 过期时间
|
||||||
|
*/
|
||||||
|
private DateTime expireAt;
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model;
|
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateTime;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
@ -51,7 +50,7 @@ public class User {
|
||||||
/**
|
/**
|
||||||
* 入职日期
|
* 入职日期
|
||||||
*/
|
*/
|
||||||
private DateTime joinTime;
|
private Date joinTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工作状态
|
* 工作状态
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class UserLoginInfo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工号
|
||||||
|
*/
|
||||||
|
private String workNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户密码
|
||||||
|
*/
|
||||||
|
private String userPwd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 令牌
|
||||||
|
*/
|
||||||
|
private String token;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.repository;
|
||||||
|
|
||||||
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.Token;
|
||||||
|
|
||||||
|
public interface TokenRepository {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 令牌插入
|
||||||
|
* @param token
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int insert(Token token);
|
||||||
|
}
|
||||||
|
|
@ -10,4 +10,11 @@ public interface UserRepository {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int insert(User user);
|
int insert(User user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工号查询用户
|
||||||
|
* @param workNumber
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
User selectUserByWorkNumber(String workNumber);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service;
|
||||||
|
|
||||||
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.Token;
|
||||||
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.User;
|
||||||
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.UserLoginInfo;
|
||||||
|
|
||||||
|
public interface TokenService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建令牌
|
||||||
|
* @param loginInfo
|
||||||
|
* @return 令牌
|
||||||
|
*/
|
||||||
|
public String createToken(UserLoginInfo loginInfo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建用户令牌
|
||||||
|
* @param user
|
||||||
|
* @param tokenStr
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Boolean createUserToken (User user, String tokenStr);
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service;
|
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service;
|
||||||
|
|
||||||
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.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;
|
||||||
|
|
||||||
public interface UserService {
|
public interface UserService {
|
||||||
|
|
||||||
|
|
@ -10,4 +11,19 @@ public interface UserService {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Boolean createUser(User user);
|
Boolean createUser(User user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工号查询用户
|
||||||
|
* @param workNumber
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
User getUserByWorkNumber(String workNumber);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比较密码是否相同
|
||||||
|
* @param user
|
||||||
|
* @param password
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean matchPassword(User user, String password);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.Token;
|
||||||
|
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.repository.TokenRepository;
|
||||||
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service.TokenService;
|
||||||
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.util.UserConstant;
|
||||||
|
import io.jsonwebtoken.Jwts;
|
||||||
|
import io.jsonwebtoken.SignatureAlgorithm;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static cn.hutool.core.date.SystemClock.now;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TokenServiceImpl implements TokenService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
TokenRepository tokenRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建令牌
|
||||||
|
* @param loginInfo
|
||||||
|
* @return 令牌
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String createToken(UserLoginInfo loginInfo){
|
||||||
|
String token = UUID.randomUUID().toString();
|
||||||
|
loginInfo.setToken(token);
|
||||||
|
Map<String, Object> claims = new HashMap<>();
|
||||||
|
claims.put(UserConstant.LOGIN_USER_KEY, loginInfo);
|
||||||
|
Jwts.builder()
|
||||||
|
.addClaims(claims)
|
||||||
|
.signWith(SignatureAlgorithm.HS512, UserConstant.SECRET_KEY)
|
||||||
|
.compact();
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建用户令牌
|
||||||
|
* @param user
|
||||||
|
* @param tokenStr
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean createUserToken (User user, String tokenStr){
|
||||||
|
Token token = new Token();
|
||||||
|
token.setUserId(user.getUserId());
|
||||||
|
token.setToken(tokenStr);
|
||||||
|
token.setExpireAt(new DateTime(now()+UserConstant.DEFAULT_EXPIRE_TIME));
|
||||||
|
return tokenRepository.insert(token)>0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,9 @@ package com.electromagnetic.industry.software.data.manage.domain.boardservice.us
|
||||||
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.User;
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.User;
|
||||||
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.repository.UserRepository;
|
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.repository.UserRepository;
|
||||||
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service.UserService;
|
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 electromagnetic.data.framework.share.exception.LoggerConstant;
|
import electromagnetic.data.framework.share.exception.LoggerConstant;
|
||||||
|
import electromagnetic.data.framework.share.util.SignUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -27,4 +29,26 @@ public class UserServiceImpl implements UserService {
|
||||||
public Boolean createUser(User user) {
|
public Boolean createUser(User user) {
|
||||||
return userRepository.insert(user)>0;
|
return userRepository.insert(user)>0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工号查询用户
|
||||||
|
* @param workNumber
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public User getUserByWorkNumber(String workNumber){
|
||||||
|
return userRepository.selectUserByWorkNumber(workNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 比较密码是否相同
|
||||||
|
* @param user
|
||||||
|
* @param password
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean matchPassword(User user, String password){
|
||||||
|
String salt = user.getSalt();
|
||||||
|
String encodePwd = SignUtils.MD5(UserConstant.DEFAULT_PASSWORD+salt);
|
||||||
|
return user.getUserPwd().equals(encodePwd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,4 +11,19 @@ public class UserConstant {
|
||||||
* 默认发布状态(未发布)
|
* 默认发布状态(未发布)
|
||||||
*/
|
*/
|
||||||
public static final int DEFAULT_PUBLISH_STATUS = 0;
|
public static final int DEFAULT_PUBLISH_STATUS = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认令牌过期时间(7天)
|
||||||
|
*/
|
||||||
|
public static final long DEFAULT_EXPIRE_TIME = 7*24*60*60*1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 令牌密钥
|
||||||
|
*/
|
||||||
|
public static final String SECRET_KEY = "5JKRGV0QO4WK1WCWVK55YEU0A1NPOXOP";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 令牌前缀
|
||||||
|
*/
|
||||||
|
public static final String LOGIN_USER_KEY = "login_user_key";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,14 @@
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bouncycastle</groupId>
|
||||||
|
<artifactId>bcprov-jdk16</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.tomcat.embed</groupId>
|
||||||
|
<artifactId>tomcat-embed-core</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
package electromagnetic.data.framework.share.model;
|
package electromagnetic.data.framework.share.result;
|
||||||
|
|
||||||
import electromagnetic.data.framework.share.result.Message;
|
|
||||||
import electromagnetic.data.framework.share.result.Result;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
package electromagnetic.data.framework.share.result;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class LoginResult<T> 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 <tt>success</tt>.
|
||||||
|
*
|
||||||
|
* @return property value of success
|
||||||
|
*/
|
||||||
|
public Boolean getSuccess() {
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property <tt>success</tt>.
|
||||||
|
*
|
||||||
|
* @param success value to be assigned to property success
|
||||||
|
*/
|
||||||
|
public void setSuccess(Boolean success) {
|
||||||
|
this.success = success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property <tt>errorCode</tt>.
|
||||||
|
*
|
||||||
|
* @return property value of errorCode
|
||||||
|
*/
|
||||||
|
public String getErrorCode() {
|
||||||
|
return errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property <tt>errorCode</tt>.
|
||||||
|
*
|
||||||
|
* @param errorCode value to be assigned to property errorCode
|
||||||
|
*/
|
||||||
|
public void setErrorCode(String errorCode) {
|
||||||
|
this.errorCode = errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property <tt>errorMsg</tt>.
|
||||||
|
*
|
||||||
|
* @return property value of errorMsg
|
||||||
|
*/
|
||||||
|
public String getErrorMessage() {
|
||||||
|
return errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property <tt>errorMsg</tt>.
|
||||||
|
*
|
||||||
|
* @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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -14,6 +14,9 @@ import java.io.UnsupportedEncodingException;
|
||||||
import java.security.InvalidKeyException;
|
import java.security.InvalidKeyException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||||
|
import org.apache.tomcat.util.codec.binary.Base64;
|
||||||
|
import java.security.Security;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Description: [AES对称加密和解密]</p>
|
* <p>Description: [AES对称加密和解密]</p>
|
||||||
|
|
@ -117,6 +120,32 @@ public class AESUtils {
|
||||||
return null;
|
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) {
|
// public static void main(String[] args) {
|
||||||
// try {
|
// try {
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -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.enums.ErrorEnum;
|
||||||
|
import electromagnetic.data.framework.share.result.BaseResult;
|
||||||
import electromagnetic.data.framework.share.result.CallbackResult;
|
import electromagnetic.data.framework.share.result.CallbackResult;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回结果转换工具类
|
* 返回结果转换工具类
|
||||||
*
|
*
|
||||||
* @version $Id: DataCenterResultUtil.java, v 0.1 2021-01-11 16:57 Exp $$
|
|
||||||
*/
|
*/
|
||||||
public class BaseResultUtil {
|
public class BaseResultUtil {
|
||||||
|
|
||||||
|
|
@ -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 <T> LoginResult<T> convertToResult(CallbackResult<T> callbackResult) {
|
||||||
|
LoginResult<T> LoginResult = new LoginResult<>();
|
||||||
|
LoginResult.setSuccess(callbackResult.isSuccess());
|
||||||
|
LoginResult.setErrorCode(callbackResult.getResultCode());
|
||||||
|
LoginResult.setErrorMessage(callbackResult.getResultMessage());
|
||||||
|
return LoginResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> LoginResult<T> success(String token){
|
||||||
|
LoginResult<T> LoginResult = new LoginResult<>();
|
||||||
|
LoginResult.setSuccess(true);
|
||||||
|
LoginResult.setToken(token);
|
||||||
|
return LoginResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> LoginResult<T> fail(String code , String msg){
|
||||||
|
LoginResult<T> LoginResult = new LoginResult<>();
|
||||||
|
LoginResult.setSuccess(false);
|
||||||
|
LoginResult.setErrorCode(code);
|
||||||
|
LoginResult.setErrorMessage(msg);
|
||||||
|
return LoginResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> LoginResult fail(ErrorEnum errorEnum){
|
||||||
|
LoginResult<T> LoginResult = new LoginResult<>();
|
||||||
|
LoginResult.setSuccess(false);
|
||||||
|
LoginResult.setErrorCode(errorEnum.getCode());
|
||||||
|
LoginResult.setErrorMessage(errorEnum.getErrorMessage());
|
||||||
|
return LoginResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,11 +1,19 @@
|
||||||
package com.electromagnetic.industry.software.data.manage.facade.user;
|
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 com.electromagnetic.industry.software.data.manage.request.user.UserRequest;
|
||||||
import electromagnetic.data.framework.share.model.BaseResult;
|
import electromagnetic.data.framework.share.result.BaseResult;
|
||||||
import electromagnetic.data.framework.share.model.ElectromagneticResult;
|
import electromagnetic.data.framework.share.result.LoginResult;
|
||||||
|
|
||||||
public interface UserFacade {
|
public interface UserFacade {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户登录
|
||||||
|
* @param loginRequest
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
LoginResult<?> login(UserLoginRequest loginRequest);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增用户信息
|
* 新增用户信息
|
||||||
* @param userRequest
|
* @param userRequest
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -5,10 +5,18 @@ import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface UserMapper {
|
public interface UserMapper {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 插入
|
* 插入
|
||||||
* @param user
|
* @param user
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int insert(User user);
|
int insert(User user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工号查询用户
|
||||||
|
* @param workNumber
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
User selectUserByWorkNumber(String workNumber);
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -26,4 +26,14 @@ public class UserRepositoryImpl implements UserRepository {
|
||||||
public int insert(User user) {
|
public int insert(User user) {
|
||||||
return userMapper.insert(user);
|
return userMapper.insert(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工号查询用户
|
||||||
|
* @param workNumber
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public User selectUserByWorkNumber(String workNumber) {
|
||||||
|
return userMapper.selectUserByWorkNumber(workNumber);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.electromagnetic.industry.software.data.manage.repository.dao.TokenMapper">
|
||||||
|
<resultMap id="TokenResultMap" type="com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.Token">
|
||||||
|
<id column="id" jdbcType="BIGINT" property="id" />
|
||||||
|
<result column="user_id" jdbcType="VARCHAR" property="userId" />
|
||||||
|
<result column="token" jdbcType="VARCHAR" property="token" />
|
||||||
|
<result column="is_long_term" jdbcType="TINYINT" property="isLongTerm" />
|
||||||
|
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||||
|
<result column="expire_at" jdbcType="TIMESTAMP" property="expireAt" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<insert id="insert" parameterType="com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.Token">
|
||||||
|
insert into tokens(
|
||||||
|
<if test="userId != null and userId !='' ">user_id,</if>
|
||||||
|
<if test="token != null and token !='' ">token,</if>
|
||||||
|
is_long_term,
|
||||||
|
created_at,
|
||||||
|
<if test="expireAt != null">expire_at</if>
|
||||||
|
)
|
||||||
|
values (
|
||||||
|
<if test="userId != null and userId !='' ">#{userId},</if>
|
||||||
|
<if test="token != null and token !='' ">#{token},</if>
|
||||||
|
0,
|
||||||
|
now(),
|
||||||
|
<if test="expireAt !=null">#{expireAt}</if>
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
</mapper>
|
||||||
|
|
@ -24,6 +24,13 @@
|
||||||
<result column="effect_flag" jdbcType="TINYINT" property="effectFlag" />
|
<result column="effect_flag" jdbcType="TINYINT" property="effectFlag" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="selectUserVo">
|
||||||
|
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
|
||||||
|
</sql>
|
||||||
|
|
||||||
<insert id="insert" parameterType="com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.User">
|
<insert id="insert" parameterType="com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.User">
|
||||||
insert into ed_users(
|
insert into ed_users(
|
||||||
<if test="userId != null and userId !='' ">user_id,</if>
|
<if test="userId != null and userId !='' ">user_id,</if>
|
||||||
|
|
@ -61,4 +68,9 @@
|
||||||
1
|
1
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<select id="selectUserByWorkNumber" parameterType="String" resultMap="UserResultMap">
|
||||||
|
<include refid="selectUserVo" />
|
||||||
|
where work_number = #{workNumber}
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
12
pom.xml
12
pom.xml
|
|
@ -40,6 +40,7 @@
|
||||||
<validation.version>2.0.1.Final</validation.version>
|
<validation.version>2.0.1.Final</validation.version>
|
||||||
<hibernate.validator.version>6.0.18.Final</hibernate.validator.version>
|
<hibernate.validator.version>6.0.18.Final</hibernate.validator.version>
|
||||||
<framework.version>1.0.2.1-SNAPSHOT</framework.version>
|
<framework.version>1.0.2.1-SNAPSHOT</framework.version>
|
||||||
|
<jwt.version>0.9.0</jwt.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
|
@ -239,6 +240,17 @@
|
||||||
<artifactId>hibernate-validator</artifactId>
|
<artifactId>hibernate-validator</artifactId>
|
||||||
<version>${hibernate.validator.version}</version>
|
<version>${hibernate.validator.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!--Token生成与解析-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt</artifactId>
|
||||||
|
<version>${jwt.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bouncycastle</groupId>
|
||||||
|
<artifactId>bcprov-jdk16</artifactId>
|
||||||
|
<version>1.46</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,10 @@
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-lang3</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bouncycastle</groupId>
|
||||||
|
<artifactId>bcprov-jdk16</artifactId>
|
||||||
|
<version>1.46</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,22 @@
|
||||||
package com.electromagnetic.industry.software.data.manage.service.facade.user;
|
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.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.service.UserService;
|
||||||
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.util.UserConstant;
|
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.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.request.user.UserRequest;
|
||||||
import com.electromagnetic.industry.software.data.manage.service.mappers.UserMappers;
|
import com.electromagnetic.industry.software.data.manage.service.mappers.UserMappers;
|
||||||
import electromagnetic.data.framework.share.id.IdWorker;
|
import electromagnetic.data.framework.share.id.IdWorker;
|
||||||
import electromagnetic.data.framework.share.model.BaseResult;
|
import electromagnetic.data.framework.share.result.BaseResult;
|
||||||
import electromagnetic.data.framework.share.model.BaseResultUtil;
|
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 org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
@ -18,6 +26,26 @@ public class UserFacadeImpl implements UserFacade {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
@Resource
|
||||||
|
private TokenService tokenService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户登录
|
||||||
|
* @param loginRequest
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public LoginResult<Boolean> 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
|
@Override
|
||||||
public BaseResult<Boolean> createUser(UserRequest userRequest){
|
public BaseResult<Boolean> createUser(UserRequest userRequest){
|
||||||
User user = UserMappers.INSTANCE.getUserRequestToModel(userRequest);
|
User user = UserMappers.INSTANCE.getUserRequestToModel(userRequest);
|
||||||
|
user.setSalt(RandomStringUtils.randomAlphanumeric(16));
|
||||||
user.setUserId(IdWorker.getSnowFlakeIdString());
|
user.setUserId(IdWorker.getSnowFlakeIdString());
|
||||||
user.setUserPwd(UserConstant.DEFAULT_PASSWORD);
|
user.setUserPwd(SignUtils.MD5(UserConstant.DEFAULT_PASSWORD+user.getSalt()));
|
||||||
user.setIsPublished(UserConstant.DEFAULT_PUBLISH_STATUS);
|
user.setIsPublished(UserConstant.DEFAULT_PUBLISH_STATUS);
|
||||||
return BaseResultUtil.success(userService.createUser(user));
|
return BaseResultUtil.success(userService.createUser(user));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@
|
||||||
package com.electromagnetic.industry.software.data.manage.service.mappers;
|
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.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 com.electromagnetic.industry.software.data.manage.request.user.UserRequest;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
@ -25,4 +27,10 @@ public interface UserMappers {
|
||||||
*/
|
*/
|
||||||
User getUserRequestToModel(UserRequest userRequest);
|
User getUserRequestToModel(UserRequest userRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户登录Request转用户登录模型
|
||||||
|
* @param loginRequest
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UserLoginInfo getUserLoginRequestToModel(UserLoginRequest loginRequest);
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue