screen-api/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
@@ -1,6 +1,7 @@ package com.moral.api.exception; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -21,7 +22,7 @@ @ResponseStatus(HttpStatus.OK) public ResultMessage handleException(Exception ex) { ex.printStackTrace(); return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "请求失败"); return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), ResponseCodeEnum.FAIL.getMsg()); } /** @@ -31,7 +32,7 @@ @ResponseBody @ResponseStatus(HttpStatus.OK) public ResultMessage handleUserNotExistException(BusinessException ex) { return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "请求用户数据失败"); return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), "请求用户数据失败"); } } screen-common/src/main/java/com/moral/constant/Constants.java
@@ -4,55 +4,7 @@ * 通用常量信息 */ public class Constants { public static String DELETE = "1"; /** * 操作成功 */ public static final String MSG_OPERATION_SUCCESS = "操作成功!"; /** * 操作失败 */ public static final String MSG_OPERATION_FAILED = "操作失败!"; /* * token无效 * */ public static final String MSG_TOKEN_ERROR = "token无效,请重新登陆"; /* * token生成失败 * */ public static final String MSG_TOKEN_CREATE_ERROR = "token生成失败,请联系管理员"; /* * 前端传入参数不完整 * */ public static final String MSG_PARAMETER_IS_MISSING = "参数不全"; /** * 操作成功code */ public static final int CODE_OPERATION_SUCCESS = 0; /** * 操作失败code */ public static final int CODE_OPERATION_FAILED = -1; /* * 前端传入参数不完整 * */ public static final int CODE_PARAMETER_IS_MISSING = -2; /** * token校验失败 */ public static final int CODE_TOKEN_ERROR = -10; /* * token生成失败 * */ public static final int CODE_TOKEN_CREATE_ERROR = -11; public static String NOT_DELETE = "0"; } screen-common/src/main/java/com/moral/constant/ResponseCodeEnum.java
@@ -17,14 +17,11 @@ ACCOUNT_NOT_EXIST(-5,"用户不存在"), ACCOUNT_EXIST(-6,"用户已经存在"), ACCOUNT_IS_DELETE(-7,"用户已经被删除"), PASSWORD_INVALID(-8,"密码错误"), PASSWORD_ERROR(-8,"密码错误"), MOBILE_INVALID(-9,"手机号无效"), EMAIL_INVALID(-10,"邮箱无效"), ACCOUNT_LENGTH_INVALID(-11,"账号长度无效"), PASSWORD_LENGTH_INVALID(-12,"账号长度无效"), ACCOUNT_EXIST_SPECIAL_CHAR(-13,"用户名包含特殊字符"), PASSWORD_EXIST_SPECIAL_CHAR(-14,"密码包含特殊字符") ACCOUNT_INVALID(-11,"用户名无效"), PASSWORD_INVALID(-12,"密码无效") ; private final Integer code; private final String msg; screen-common/src/main/java/com/moral/util/AESUtils.java
@@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.net.util.Base64; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * @ClassName AESUtil @@ -15,9 +17,10 @@ * @Version TODO **/ @Slf4j @Component public class AESUtils { //密钥 public static String key = "AD42F7787B035B7580000EF93BE20BAD"; public static String key ; //字符集 private static String charset = "utf-8"; // 偏移量 @@ -26,6 +29,14 @@ private static String transformation = "AES/CBC/PKCS5Padding"; private static String algorithm = "AES"; @Value("${AES.KEY}") public void setKey(String key) { AESUtils.key = key; } //加密 public static String encrypt(String content) { return encrypt(content, key); screen-common/src/main/java/com/moral/util/RegexUtils.java
@@ -16,6 +16,10 @@ return account.matches(regex); } public static void main(String[] args) { } /** * 验证密码 * screen-common/src/main/java/com/moral/util/TokenUtils.java
@@ -1,6 +1,7 @@ package com.moral.util; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.exception.TokenException; import com.sun.org.apache.bcel.internal.classfile.ConstantString; import lombok.extern.slf4j.Slf4j; @@ -60,7 +61,8 @@ return token; } catch (Exception e) { log.error("token生成异常:"+e.getMessage()); throw new TokenException(Constants.CODE_TOKEN_CREATE_ERROR,Constants.MSG_TOKEN_CREATE_ERROR); throw new TokenException(ResponseCodeEnum.TOKEN_CREATE_ERROR.getCode(), ResponseCodeEnum.TOKEN_CREATE_ERROR.getMsg()); } } @@ -77,15 +79,18 @@ String[] tokenArray = TokenEncryptUtils.decoded(token).split("/"); //校验token是否合法 if (tokenArray.length != 2) { throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR); throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), ResponseCodeEnum.TOKEN_INVALID.getMsg()); } //校验token是否过期 if (!redisTemplate.hasKey(token)) { throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR); throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), ResponseCodeEnum.TOKEN_INVALID.getMsg()); } } catch (Exception e) { log.error("token工具类校验token异常" + e.getMessage()); throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR); throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), ResponseCodeEnum.TOKEN_INVALID.getMsg()); } } @@ -99,7 +104,8 @@ public static Object getUserInfoByToken(String token) { Object userInfo = redisTemplate.opsForValue().get(token); if(userInfo==null) throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR); throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), ResponseCodeEnum.TOKEN_INVALID.getMsg()); return userInfo; } screen-manage/src/main/java/com/moral/api/controller/AccountController.java
@@ -40,7 +40,8 @@ @PostMapping("login") public ResultMessage login(@RequestBody LoginForm loginForm) { if (!loginForm.valid()) return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING); return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); LoginDTO loginDTO = accountService.login(loginForm); @@ -69,6 +70,11 @@ if(!accountInsertForm.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //判断参数是否符合条件 AccountInsertDTO conditionDTO = accountInsertForm.paramValid(); if(conditionDTO.getCode()!=ResponseCodeEnum.SUCCESS.getCode()){ return new ResultMessage(conditionDTO.getCode(),conditionDTO.getMsg(),null); } AccountInsertDTO accountInsertDTO = accountService.insertAccount(accountInsertForm); @@ -80,7 +86,8 @@ @GetMapping("query") public ResultMessage query(AccountQueryForm accountQueryForm){ if(!accountQueryForm.valid()) return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING); return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); AccountQueryDTO accountQueryDTO = accountService.queryAccount(accountQueryForm); @@ -91,11 +98,18 @@ @PostMapping("update") public ResultMessage update(@RequestBody AccountUpdateForm accountQeuryRequest){ if(!accountQeuryRequest.valid()) return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING); public ResultMessage update(@RequestBody AccountUpdateForm accountUpdateRequest){ if(!accountUpdateRequest.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); AccountUpdateDTO accountUpdateDTO = accountService.updateAccount(accountQeuryRequest); //判断参数是否符合条件 AccountUpdateDTO conditionDTO = accountUpdateRequest.paramValid(); if(conditionDTO.getCode()!=ResponseCodeEnum.SUCCESS.getCode()){ return new ResultMessage(conditionDTO.getCode(),conditionDTO.getMsg(),null); } AccountUpdateDTO accountUpdateDTO = accountService.updateAccount(accountUpdateRequest); AccountUpdateVO accountUpdateVO = AccountUpdateVO.convert(accountUpdateDTO); @@ -105,7 +119,8 @@ @PostMapping("delete") public ResultMessage delete(@RequestBody AccountDeleteForm accountDeleteForm){ if(!accountDeleteForm.valid()) return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING); return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); AccountDeleteDTO accountDeleteDTO = accountService.deleteAccount(accountDeleteForm); screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
@@ -1,6 +1,7 @@ package com.moral.api.exception; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import com.moral.exception.TokenException; import lombok.extern.slf4j.Slf4j; @@ -24,7 +25,7 @@ public ResultMessage handleException(Exception ex) { log.error(ex.getMessage()); ex.printStackTrace(); return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "请求失败"); return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), ResponseCodeEnum.FAIL.getMsg()); } /** @@ -34,7 +35,7 @@ @ResponseBody @ResponseStatus(HttpStatus.OK) public ResultMessage handleUserNotExistException(BusinessException ex) { return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "请求用户数据失败"); return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), "请求用户数据失败"); } /** screen-manage/src/main/java/com/moral/api/pojo/form/AccountInsertForm.java
@@ -1,6 +1,11 @@ package com.moral.api.pojo.form; import com.moral.api.pojo.dto.account.AccountInsertDTO; import com.moral.constant.ResponseCodeEnum; import com.moral.util.AESUtils; import com.moral.util.RegexUtils; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.ObjectUtils; import java.io.Serializable; @@ -54,4 +59,35 @@ return false; return true; } public AccountInsertDTO paramValid(){ AccountInsertDTO dto = new AccountInsertDTO(); //判断用户名是否符合条件 if(!RegexUtils.checkAccount(account)){ dto.setCode(ResponseCodeEnum.ACCOUNT_INVALID.getCode()); dto.setMsg(ResponseCodeEnum.ACCOUNT_INVALID.getMsg()); return dto; } //判断密码是否符合条件 if(!RegexUtils.checkPassword(AESUtils.decrypt(password))){ dto.setCode(ResponseCodeEnum.PASSWORD_INVALID.getCode()); dto.setMsg(ResponseCodeEnum.PASSWORD_INVALID.getMsg()); return dto; } //判断手机号是否符合条件 if(!RegexUtils.checkMobile(mobile)){ dto.setCode(ResponseCodeEnum.MOBILE_INVALID.getCode()); dto.setMsg(ResponseCodeEnum.MOBILE_INVALID.getMsg()); return dto; } //判断邮箱是否符合条件 if(!RegexUtils.checkEmail(email)){ dto.setCode(ResponseCodeEnum.EMAIL_INVALID.getCode()); dto.setMsg(ResponseCodeEnum.EMAIL_INVALID.getMsg()); return dto; } dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } } screen-manage/src/main/java/com/moral/api/pojo/form/AccountUpdateForm.java
@@ -1,5 +1,10 @@ package com.moral.api.pojo.form; import com.moral.api.pojo.dto.account.AccountInsertDTO; import com.moral.api.pojo.dto.account.AccountUpdateDTO; import com.moral.constant.ResponseCodeEnum; import com.moral.util.AESUtils; import com.moral.util.RegexUtils; import lombok.Data; import org.springframework.util.ObjectUtils; @@ -39,4 +44,23 @@ return true; } public AccountUpdateDTO paramValid(){ AccountUpdateDTO dto = new AccountUpdateDTO(); //判断手机号是否符合条件 if(!RegexUtils.checkMobile(mobile)){ dto.setCode(ResponseCodeEnum.MOBILE_INVALID.getCode()); dto.setMsg(ResponseCodeEnum.MOBILE_INVALID.getMsg()); return dto; } //判断邮箱是否符合条件 if(!RegexUtils.checkEmail(email)){ dto.setCode(ResponseCodeEnum.EMAIL_INVALID.getCode()); dto.setMsg(ResponseCodeEnum.EMAIL_INVALID.getMsg()); return dto; } dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } } screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -43,8 +43,7 @@ @Service public class ManageAccountServiceImpl extends ServiceImpl<ManageAccountMapper, ManageAccount> implements ManageAccountService { @Value("${AES.KEY}") private String AESKey; @Autowired ManageAccountMapper manageAccountMapper; @Autowired @@ -54,11 +53,6 @@ @Autowired ManageAccountRoleMapper manageAccountRoleMapper; public final static String specialCharRegEx = "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t"; public final static String mobileRegEx = "^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$"; public final static String emailRegEx = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"; /** * @Description: 登陆 @@ -74,7 +68,7 @@ String account = loginForm.getAccount(); String AESPassword = loginForm.getPassword(); //解密 String password = AESUtils.decrypt(AESPassword, AESKey); String password = AESUtils.decrypt(AESPassword); //查询是否存在 QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>(); wrapper.eq("account", account); @@ -98,8 +92,8 @@ } //校验密码 if (!MD5Utils.saltMD5Verify(password, manageAccount.getPassword())) { loginDTO.setCode(ResponseCodeEnum.PASSWORD_INVALID.getCode()); loginDTO.setMsg(ResponseCodeEnum.PASSWORD_INVALID.getMsg()); loginDTO.setCode(ResponseCodeEnum.PASSWORD_ERROR.getCode()); loginDTO.setMsg(ResponseCodeEnum.PASSWORD_ERROR.getMsg()); return loginDTO; } @@ -159,49 +153,13 @@ //取参 String account = accountInsertForm.getAccount(); String AESPassword = accountInsertForm.getPassword(); String password = MD5Utils.saltMD5(AESUtils.decrypt(AESPassword, AESKey)); String password = MD5Utils.saltMD5(AESUtils.decrypt(AESPassword)); String userName = accountInsertForm.getUserName(); String email = accountInsertForm.getEmail(); String mobile = accountInsertForm.getMobile(); String wechat = accountInsertForm.getWechat(); List<String> roleIdsStr = accountInsertForm.getRoleIds(); //校验参数是否符合业务逻辑 /*判断用户名是否包含特殊字符*/ if (isSpecialChar(account)) { accountInsertDTO.setCode(ResponseCodeEnum.ACCOUNT_EXIST_SPECIAL_CHAR.getCode()); accountInsertDTO.setMsg(ResponseCodeEnum.ACCOUNT_EXIST_SPECIAL_CHAR.getMsg()); return accountInsertDTO; } /*判断密码是否包含特殊字符*/ if (isSpecialChar(password)) { accountInsertDTO.setCode(ResponseCodeEnum.PASSWORD_EXIST_SPECIAL_CHAR.getCode()); accountInsertDTO.setMsg(ResponseCodeEnum.PASSWORD_EXIST_SPECIAL_CHAR.getMsg()); return accountInsertDTO; } /*判断用户名是否超过长度*/ if (account.length() >= 20 || account.length() <= 6) { accountInsertDTO.setCode(ResponseCodeEnum.ACCOUNT_LENGTH_INVALID.getCode()); accountInsertDTO.setMsg(ResponseCodeEnum.ACCOUNT_LENGTH_INVALID.getMsg()); return accountInsertDTO; } /*判断密码是否超过长度*/ if (AESUtils.decrypt(AESPassword, AESKey).length() >= 20 || AESUtils.decrypt(AESPassword, AESKey).length() <= 6) { accountInsertDTO.setCode(ResponseCodeEnum.PASSWORD_LENGTH_INVALID.getCode()); accountInsertDTO.setMsg(ResponseCodeEnum.PASSWORD_LENGTH_INVALID.getMsg()); return accountInsertDTO; } /*判断手机号是否符合规则*/ if (!isValidMobile(mobile)) { accountInsertDTO.setCode(ResponseCodeEnum.MOBILE_INVALID.getCode()); accountInsertDTO.setMsg(ResponseCodeEnum.MOBILE_INVALID.getMsg()); return accountInsertDTO; } /*判断邮箱是否符合规则*/ if (!isValidEmail(email)) { accountInsertDTO.setCode(ResponseCodeEnum.EMAIL_INVALID.getCode()); accountInsertDTO.setMsg(ResponseCodeEnum.EMAIL_INVALID.getMsg()); return accountInsertDTO; } /*判断账号是否存在*/ ManageAccount exitAccount = new ManageAccount(); exitAccount.setAccount(account); @@ -360,18 +318,6 @@ accountUpdateDTO.setMsg(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg()); return accountUpdateDTO; } /*判断手机号是否符合规则*/ if (!isValidMobile(mobile)) { accountUpdateDTO.setCode(ResponseCodeEnum.MOBILE_INVALID.getCode()); accountUpdateDTO.setMsg(ResponseCodeEnum.MOBILE_INVALID.getMsg()); return accountUpdateDTO; } /*判断邮箱是否符合规则*/ if (!isValidEmail(email)) { accountUpdateDTO.setCode(ResponseCodeEnum.EMAIL_INVALID.getCode()); accountUpdateDTO.setMsg(ResponseCodeEnum.EMAIL_INVALID.getMsg()); return accountUpdateDTO; } //更新ManageAccount表 ManageAccount manageAccount = new ManageAccount(); manageAccount.setEmail(email); @@ -446,23 +392,6 @@ } private static boolean isSpecialChar(String str) { Pattern pattern = Pattern.compile(specialCharRegEx); Matcher matcher = pattern.matcher(str); return matcher.find(); } private static boolean isValidMobile(String str) { Pattern pattern = Pattern.compile(mobileRegEx); Matcher matcher = pattern.matcher(str); return matcher.find(); } private static boolean isValidEmail(String str) { Pattern pattern = Pattern.compile(emailRegEx); Matcher matcher = pattern.matcher(str); return matcher.find(); } }