Merge remote-tracking branch 'origin/develop_comac' into develop

This commit is contained in:
sxlong 2024-11-29 16:24:07 +08:00
commit fecb6d2102
15 changed files with 129 additions and 76 deletions

View File

@ -30,7 +30,9 @@ public class UserController {
@ApiOperation(value="编辑用户信息",notes = "")
@PutMapping("/updateUser")
public ElectromagneticResult<?> updateUser(@RequestBody UserModiRequest userModiRequest){ return userFacade.modifyUser(userModiRequest);}
public ElectromagneticResult<?> updateUser(@RequestBody UserModiRequest userModiRequest){
return userFacade.modifyUser(userModiRequest);
}
@ApiOperation(value = "发布用户信息", notes = "")
@RequestMapping(value = "/publish", method = RequestMethod.POST)

View File

@ -1,6 +1,13 @@
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.interceptor;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service.TokenService;
import electromagnetic.data.framework.share.constants.UserConstants;
import electromagnetic.data.framework.share.model.UserLoginInfo;
import electromagnetic.data.framework.share.util.TokenUtil;
import electromagnetic.data.framework.share.util.UserThreadLocal;
import io.jsonwebtoken.Claims;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@ -12,6 +19,8 @@ import javax.servlet.http.HttpServletResponse;
@Component
public class LoginInterceptor implements HandlerInterceptor {
private static Logger LOGGER = LoggerFactory.getLogger("LOGIN_INTERCEPTOR");
@Resource
TokenService tokenService;
@ -19,17 +28,31 @@ public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("Authorization");
if (token==null || !token.startsWith("Bearer ")) {
if (token==null) {
LOGGER.error("Authorization header is null");
response.setStatus(401);
return false;
} else {
//token = token.substring(7);
token = token.substring(7);
}
boolean result = tokenService.isTokenValid(token.substring(7));
boolean result = tokenService.isTokenValid(token);
if (!result) {
LOGGER.error("Invalid token");
response.setStatus(401);
return false;
} else {
Claims claims = TokenUtil.getLoginInfo(token);
if (claims==null) {
LOGGER.error("User info is missing");
response.setStatus(401);
return false;
} else {
UserLoginInfo userLoginInfo = new UserLoginInfo();
userLoginInfo.setUserId(claims.get(UserConstants.LOGIN_USER_ID, String.class));
userLoginInfo.setUsername(claims.get(UserConstants.LOGIN_USER_NAME, String.class));
userLoginInfo.setWorkNumber(claims.get(UserConstants.LOGIN_WORK_NUMBER, String.class));
UserThreadLocal.set(userLoginInfo);
}
return true;
}
}
@ -41,6 +64,6 @@ public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
UserThreadLocal.remove();
}
}

View File

@ -1,7 +1,7 @@
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.UserLoginInfo;
import electromagnetic.data.framework.share.model.UserLoginInfo;
public interface TokenService {

View File

@ -4,10 +4,10 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.SystemClock;
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 electromagnetic.data.framework.share.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 electromagnetic.data.framework.share.constants.UserConstants;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Service;
@ -16,7 +16,6 @@ import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import static cn.hutool.core.date.SystemClock.now;
@ -33,15 +32,15 @@ public class TokenServiceImpl implements TokenService {
*/
@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()
claims.put(UserConstants.LOGIN_USER_ID, loginInfo.getUserId());
claims.put(UserConstants.LOGIN_USER_NAME, loginInfo.getUsername());
claims.put(UserConstants.LOGIN_WORK_NUMBER, loginInfo.getWorkNumber());
return Jwts.builder()
.addClaims(claims)
.signWith(SignatureAlgorithm.HS512, UserConstant.SECRET_KEY)
.setIssuedAt(DateTime.now())
.signWith(SignatureAlgorithm.HS512, UserConstants.SECRET_KEY)
.compact();
return token;
}
/**
@ -55,7 +54,7 @@ public class TokenServiceImpl implements TokenService {
Token token = new Token();
token.setUserId(user.getUserId());
token.setToken(tokenStr);
token.setExpireAt(new DateTime(now()+UserConstant.DEFAULT_EXPIRE_TIME));
token.setExpireAt(new DateTime(now()+ UserConstants.DEFAULT_EXPIRE_TIME));
return tokenRepository.insert(token)>0;
}

View File

@ -1,6 +1,6 @@
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.util;
package electromagnetic.data.framework.share.constants;
public class UserConstant {
public class UserConstants {
/**
* 默认初始密码
@ -25,5 +25,7 @@ public class UserConstant {
/**
* 令牌前缀
*/
public static final String LOGIN_USER_KEY = "login_user_key";
public static final String LOGIN_USER_NAME = "userName";
public static final String LOGIN_WORK_NUMBER = "workNumber";
public static final String LOGIN_USER_ID = "userId";
}

View File

@ -1,4 +1,4 @@
package com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model;
package electromagnetic.data.framework.share.model;
import lombok.Data;
@ -10,6 +10,16 @@ public class UserLoginInfo {
*/
private String workNumber;
/**
* 用户名
*/
private String username;
/**
* 用户编号
*/
private String userId;
/**
* 用户密码
*/

View File

@ -0,0 +1,21 @@
package electromagnetic.data.framework.share.util;
import electromagnetic.data.framework.share.constants.UserConstants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
public class TokenUtil {
/**
* 获取Claim
*
* @param token
* @return
*/
public static Claims getLoginInfo(String token) {
return Jwts.parser()
.setSigningKey(UserConstants.SECRET_KEY)
.parseClaimsJws(token)
.getBody();
}
}

View File

@ -0,0 +1,30 @@
package electromagnetic.data.framework.share.util;
import electromagnetic.data.framework.share.model.UserLoginInfo;
public class UserThreadLocal {
/**
* 存储用户信息
*/
private static ThreadLocal<UserLoginInfo> userThread = new ThreadLocal<>();
public static void set(UserLoginInfo userLoginInfo) {
userThread.set(userLoginInfo);
}
public static UserLoginInfo getUser() {
return userThread.get();
}
public static String getUsername() {
return userThread.get().getUsername();
}
public static String getUserId() {
return userThread.get().getUserId();
}
public static void remove() {
userThread.remove();
}
}

View File

@ -16,13 +16,4 @@ public class UserDeleteRequest extends BaseRequest implements Serializable {
*/
private String userId;
/**
* 更新人姓名
*/
private String modifier;
/**
* 更新人工号
*/
private String modifierName;
}

View File

@ -57,14 +57,4 @@ public class UserModiRequest extends BaseRequest implements Serializable {
* 实习截止日期
*/
private Date internshipEndDate;
/**
* 创建者
*/
private String modifier;
/**
* 创建者姓名
*/
private String modifierName;
}

View File

@ -17,13 +17,4 @@ public class UserPublishRequest extends BaseRequest implements Serializable {
*/
private List<String> userIds;
/**
* 编辑者
*/
private String modifier;
/**
* 编辑者姓名
*/
private String modifierName;
}

View File

@ -53,24 +53,4 @@ public class UserRequest extends BaseRequest implements Serializable {
*/
private Date internshipEndDate;
/**
* 创建者
*/
private String creator;
/**
* 创建者姓名
*/
private String creatorName;
/**
* 编辑者userId
*/
private String modifier;
/**
* 编辑者姓名
*/
private String modifierName;
}

View File

@ -82,6 +82,7 @@
<if test="internshipEndDate != null">internship_end_date = #{internshipEndDate},</if>
<if test="modifier != null and modifier != ''">modifier = #{modifier},</if>
<if test="modifierName != null and modifierName != ''">modifier_name = #{modifierName},</if>
gmt_modified=now()
</set>
where user_id= #{userId}
</update>
@ -93,6 +94,7 @@
is_published = 1,
<if test="modifier != null and modifier != ''">modifier = #{modifier},</if>
<if test="modifierName != null and modifierName != ''">modifier_name = #{modifierName},</if>
gmt_modified = now()
</trim>
where user_id IN
<foreach collection="userIds" item="userId" open="(" separator="," close=")">
@ -202,7 +204,8 @@
<set>
effect_flag=0,
modifier=#{modifier},
modifier_name=#{modifierName}
modifier_name=#{modifierName},
gmt_modified = now()
</set>
where user_id = #{userId}
</update>

View File

@ -2,13 +2,13 @@ package com.electromagnetic.industry.software.data.manage.service.facade.user;
import com.electromagnetic.industry.software.data.manage.common.ElectromagneticErrorEnum;
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 electromagnetic.data.framework.share.model.UserLoginInfo;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.PublishParam;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.SearchKeyWords;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.UserDeleteKeyWords;
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 electromagnetic.data.framework.share.constants.UserConstants;
import com.electromagnetic.industry.software.data.manage.facade.user.UserFacade;
import com.electromagnetic.industry.software.data.manage.request.user.*;
import com.electromagnetic.industry.software.data.manage.response.user.SingleUserResponse;
@ -20,11 +20,12 @@ import electromagnetic.data.framework.share.model.ElectromagneticResult;
import electromagnetic.data.framework.share.model.ElectromagneticResultUtil;
import electromagnetic.data.framework.share.sign.AESUtils;
import electromagnetic.data.framework.share.util.SignUtils;
import electromagnetic.data.framework.share.util.TokenUtil;
import electromagnetic.data.framework.share.util.UserThreadLocal;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Service
@ -43,8 +44,10 @@ public class UserFacadeImpl implements UserFacade {
@Override
public ElectromagneticResult<UserLoginResponse> login(UserLoginRequest loginRequest) {
UserLoginInfo info = UserMappers.INSTANCE.getUserLoginRequestToModel(loginRequest);
String decodePwd = AESUtils.decrypt(info.getUserPwd(), UserConstant.SECRET_KEY);
String decodePwd = AESUtils.decrypt(info.getUserPwd(), UserConstants.SECRET_KEY);
User user = userService.getUserByWorkNumber(info.getWorkNumber());
info.setUserId(user.getUserId());
info.setUsername(user.getUserName());
if ( userService.checkUserValid(user) && userService.matchPassword(user, decodePwd)) {
String tokenStr = tokenService.createToken(info);
tokenService.createUserToken(user, tokenStr);
@ -66,8 +69,10 @@ public class UserFacadeImpl implements UserFacade {
User user = UserMappers.INSTANCE.getUserRequestToModel(userRequest);
user.setSalt(RandomStringUtils.randomAlphanumeric(16));
user.setUserId(IdWorker.getSnowFlakeIdString());
user.setUserPwd(SignUtils.MD5(UserConstant.DEFAULT_PASSWORD+user.getSalt()));
user.setIsPublished(UserConstant.DEFAULT_PUBLISH_STATUS);
user.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD+user.getSalt()));
user.setIsPublished(UserConstants.DEFAULT_PUBLISH_STATUS);
user.setCreator(UserThreadLocal.getUserId());
user.setCreatorName(UserThreadLocal.getUsername());
return ElectromagneticResultUtil.success(userService.createUser(user));
}
@ -80,6 +85,8 @@ public class UserFacadeImpl implements UserFacade {
public ElectromagneticResult<Boolean> modifyUser(UserModiRequest userModiRequest) {
// 将请求对象转换为模型对象
User user = UserMappers.INSTANCE.getUserModiRequestToModel(userModiRequest);
user.setModifier(UserThreadLocal.getUserId());
user.setModifierName(UserThreadLocal.getUsername());
//根据操作结果构建 BaseResult 对象并返回
return ElectromagneticResultUtil.success(userService.modifyUser(user));
}
@ -92,6 +99,8 @@ public class UserFacadeImpl implements UserFacade {
@Override
public ElectromagneticResult<Boolean> publishUser(UserPublishRequest userPublishRequest){
PublishParam model = UserMappers.INSTANCE.getUserPublishRequestToModel(userPublishRequest);
model.setModifier(UserThreadLocal.getUserId());
model.setModifierName(UserThreadLocal.getUsername());
return ElectromagneticResultUtil.success(userService.publishUser(model));
}
@ -179,6 +188,8 @@ public class UserFacadeImpl implements UserFacade {
public ElectromagneticResult<?> deleteUser(UserDeleteRequest userDeleteRequest) {
// 将请求对象转换为模型对象
UserDeleteKeyWords userDeleteKeyWords = UserMappers.INSTANCE.getUserDeleteRequestToModel(userDeleteRequest);
userDeleteKeyWords.setModifier(UserThreadLocal.getUserId());
userDeleteKeyWords.setModifierName(UserThreadLocal.getUsername());
// 检查用户是否已经被逻辑删除
User existingUser = userService.getSingleUser(userDeleteKeyWords.getUserId());

View File

@ -4,7 +4,7 @@
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 electromagnetic.data.framework.share.model.UserLoginInfo;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.PublishParam;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.SearchKeyWords;
import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.UserDeleteKeyWords;