|
|
@@ -71,55 +71,161 @@ public class LoginController {
|
|
|
@Resource
|
|
|
private RoleService roleService;
|
|
|
|
|
|
+
|
|
|
+
|
|
|
@NoToken
|
|
|
@PostMapping("/login")
|
|
|
- @ApiOperation(value = "后台登录",httpMethod = "POST")
|
|
|
+ @ApiOperation(value = "后台登录", httpMethod = "POST")
|
|
|
public Result add(@RequestBody LoginAccountParameters loginParameters) {
|
|
|
- if(loginParameters == null){
|
|
|
- return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
|
|
|
- }
|
|
|
- if(StringUtils.isBlank(loginParameters.getAccount())){
|
|
|
- return ResultGenerator.genFailResult(ResultCode.ACCOUNT_IS_NULL);
|
|
|
- }
|
|
|
- Condition condition = new Condition(User.class);
|
|
|
- condition.createCriteria().andEqualTo("loginAccount",loginParameters.getAccount());
|
|
|
- List<User> users = userService.findByCondition(condition);
|
|
|
- if(CollUtil.isEmpty(users)){
|
|
|
- return ResultGenerator.genFailResult(ResultCode.USER_IS_NULL);
|
|
|
- }
|
|
|
- if(users.size() != 1){
|
|
|
- return ResultGenerator.genFailResult(ResultCode.USER_IS_ERROR);
|
|
|
- }
|
|
|
- User user = users.get(0);
|
|
|
- if(StrUtil.equals("1",user.getStatus())){
|
|
|
- return ResultGenerator.genFailResult(ResultCode.LOGIN_USER_STATUS_IS_ERROR);
|
|
|
- }
|
|
|
- String pwd2 = SecureUtil.md5(loginParameters.getPwd() + user.getSalt()).toUpperCase();
|
|
|
- log.error("[密码]"+loginParameters.getAccount() + " :"+pwd2);
|
|
|
- // String pwd2 = MD5Util.getMD5((loginParameters.getPwd() + user.getSalt()).toUpperCase());
|
|
|
- if (StringUtils.equals(user.getPassword().toUpperCase(), pwd2)) {
|
|
|
+ long totalStartTime = System.currentTimeMillis();
|
|
|
+ long validationStartTime = 0, dbQueryStartTime = 0, statusCheckStartTime = 0;
|
|
|
+ long pwdCheckStartTime = 0, tokenCacheStartTime = 0, roleQueryStartTime = 0;
|
|
|
+
|
|
|
+ String account = null;
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 1. 参数校验阶段
|
|
|
+ validationStartTime = System.currentTimeMillis();
|
|
|
+ if (loginParameters == null) {
|
|
|
+ return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(loginParameters.getAccount())) {
|
|
|
+ return ResultGenerator.genFailResult(ResultCode.ACCOUNT_IS_NULL);
|
|
|
+ }
|
|
|
+ account = loginParameters.getAccount();
|
|
|
+ long validationTime = System.currentTimeMillis() - validationStartTime;
|
|
|
+
|
|
|
+ // 2. 数据库查询用户阶段
|
|
|
+ dbQueryStartTime = System.currentTimeMillis();
|
|
|
+ Condition condition = new Condition(User.class);
|
|
|
+ condition.createCriteria().andEqualTo("loginAccount", loginParameters.getAccount());
|
|
|
+ List<User> users = userService.findByCondition(condition);
|
|
|
+ long dbQueryTime = System.currentTimeMillis() - dbQueryStartTime;
|
|
|
+
|
|
|
+ if (CollUtil.isEmpty(users)) {
|
|
|
+ return ResultGenerator.genFailResult(ResultCode.USER_IS_NULL);
|
|
|
+ }
|
|
|
+ if (users.size() != 1) {
|
|
|
+ return ResultGenerator.genFailResult(ResultCode.USER_IS_ERROR);
|
|
|
+ }
|
|
|
+ User user = users.get(0);
|
|
|
+
|
|
|
+ // 3. 用户状态检查
|
|
|
+ statusCheckStartTime = System.currentTimeMillis();
|
|
|
+ if (StrUtil.equals("1", user.getStatus())) {
|
|
|
+ return ResultGenerator.genFailResult(ResultCode.LOGIN_USER_STATUS_IS_ERROR);
|
|
|
+ }
|
|
|
+ long statusCheckTime = System.currentTimeMillis() - statusCheckStartTime;
|
|
|
+
|
|
|
+ // 4. 密码验证阶段
|
|
|
+ pwdCheckStartTime = System.currentTimeMillis();
|
|
|
+ String pwd2 = SecureUtil.md5(loginParameters.getPwd() + user.getSalt()).toUpperCase();
|
|
|
+ long pwdCheckTime = System.currentTimeMillis() - pwdCheckStartTime;
|
|
|
+
|
|
|
+ log.error("[密码]" + loginParameters.getAccount() + " :" + pwd2);
|
|
|
+
|
|
|
+ if (!StringUtils.equals(user.getPassword().toUpperCase(), pwd2)) {
|
|
|
+ return ResultGenerator.genFailResult(ResultCode.UNLOGIN_PWD_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. Token生成和缓存阶段
|
|
|
+ tokenCacheStartTime = System.currentTimeMillis();
|
|
|
String token = StrUtil.uuid();
|
|
|
CacheKey key = CacheKey.generateKey(CacheType.UserConfig, token);
|
|
|
user.setToken(token);
|
|
|
- //设置redis缓存1小时
|
|
|
+ // 设置redis缓存7天
|
|
|
redisUtil.set(key.toString(), JSONUtil.toJsonStr(user), 7, TimeUnit.DAYS);
|
|
|
user.setPassword("***");
|
|
|
user.setSalt("***");
|
|
|
+ long tokenCacheTime = System.currentTimeMillis() - tokenCacheStartTime;
|
|
|
+
|
|
|
+ // 6. 角色查询阶段
|
|
|
+ roleQueryStartTime = System.currentTimeMillis();
|
|
|
condition = new Condition(UserRole.class);
|
|
|
- condition.createCriteria().andEqualTo("userId",user.getId());
|
|
|
+ condition.createCriteria().andEqualTo("userId", user.getId());
|
|
|
List<UserRole> userRoles = userRoleService.findByCondition(condition);
|
|
|
- if (CollUtil.isNotEmpty(userRoles)){
|
|
|
+ if (CollUtil.isNotEmpty(userRoles)) {
|
|
|
Role role = roleService.findById(userRoles.get(0).getRoleId());
|
|
|
- if (role != null){
|
|
|
+ if (role != null) {
|
|
|
user.setRoleName(role.getName());
|
|
|
}
|
|
|
}
|
|
|
+ long roleQueryTime = System.currentTimeMillis() - roleQueryStartTime;
|
|
|
+
|
|
|
+ // 计算总耗时
|
|
|
+ long totalTime = System.currentTimeMillis() - totalStartTime;
|
|
|
+
|
|
|
+ // 记录性能日志
|
|
|
+ log.info("[登录成功] 账号: " + account +
|
|
|
+ " | 耗时统计: 参数校验=" + validationTime + "ms" +
|
|
|
+ ", 用户查询=" + dbQueryTime + "ms" +
|
|
|
+ ", 状态检查=" + statusCheckTime + "ms" +
|
|
|
+ ", 密码验证=" + pwdCheckTime + "ms" +
|
|
|
+ ", Token缓存=" + tokenCacheTime + "ms" +
|
|
|
+ ", 角色查询=" + roleQueryTime + "ms" +
|
|
|
+ ", 总耗时=" + totalTime + "ms");
|
|
|
+
|
|
|
return ResultGenerator.genSuccessResult(user);
|
|
|
- } else {
|
|
|
- return ResultGenerator.genFailResult(ResultCode.UNLOGIN_PWD_ERROR);
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ long totalTime = System.currentTimeMillis() - totalStartTime;
|
|
|
+ log.error("[登录异常] 账号: " + account +
|
|
|
+ ", 总耗时: " + totalTime + "ms" +
|
|
|
+ ", 错误信息: " + e.getMessage(), e);
|
|
|
+ return ResultGenerator.genFailResult(ResultCode.INTERNAL_SERVER_ERROR);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// @NoToken
|
|
|
+// @PostMapping("/login")
|
|
|
+// @ApiOperation(value = "后台登录",httpMethod = "POST")
|
|
|
+// public Result add(@RequestBody LoginAccountParameters loginParameters) {
|
|
|
+//
|
|
|
+// if(loginParameters == null){
|
|
|
+// return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
|
|
|
+// }
|
|
|
+// if(StringUtils.isBlank(loginParameters.getAccount())){
|
|
|
+// return ResultGenerator.genFailResult(ResultCode.ACCOUNT_IS_NULL);
|
|
|
+// }
|
|
|
+// Condition condition = new Condition(User.class);
|
|
|
+// condition.createCriteria().andEqualTo("loginAccount",loginParameters.getAccount());
|
|
|
+// List<User> users = userService.findByCondition(condition);
|
|
|
+// if(CollUtil.isEmpty(users)){
|
|
|
+// return ResultGenerator.genFailResult(ResultCode.USER_IS_NULL);
|
|
|
+// }
|
|
|
+// if(users.size() != 1){
|
|
|
+// return ResultGenerator.genFailResult(ResultCode.USER_IS_ERROR);
|
|
|
+// }
|
|
|
+// User user = users.get(0);
|
|
|
+// if(StrUtil.equals("1",user.getStatus())){
|
|
|
+// return ResultGenerator.genFailResult(ResultCode.LOGIN_USER_STATUS_IS_ERROR);
|
|
|
+// }
|
|
|
+// String pwd2 = SecureUtil.md5(loginParameters.getPwd() + user.getSalt()).toUpperCase();
|
|
|
+// log.error("[密码]"+loginParameters.getAccount() + " :"+pwd2);
|
|
|
+// // String pwd2 = MD5Util.getMD5((loginParameters.getPwd() + user.getSalt()).toUpperCase());
|
|
|
+// if (StringUtils.equals(user.getPassword().toUpperCase(), pwd2)) {
|
|
|
+// String token = StrUtil.uuid();
|
|
|
+// CacheKey key = CacheKey.generateKey(CacheType.UserConfig, token);
|
|
|
+// user.setToken(token);
|
|
|
+// //设置redis缓存1小时
|
|
|
+// redisUtil.set(key.toString(), JSONUtil.toJsonStr(user), 7, TimeUnit.DAYS);
|
|
|
+// user.setPassword("***");
|
|
|
+// user.setSalt("***");
|
|
|
+// condition = new Condition(UserRole.class);
|
|
|
+// condition.createCriteria().andEqualTo("userId",user.getId());
|
|
|
+// List<UserRole> userRoles = userRoleService.findByCondition(condition);
|
|
|
+// if (CollUtil.isNotEmpty(userRoles)){
|
|
|
+// Role role = roleService.findById(userRoles.get(0).getRoleId());
|
|
|
+// if (role != null){
|
|
|
+// user.setRoleName(role.getName());
|
|
|
+// }
|
|
|
+// }
|
|
|
+// return ResultGenerator.genSuccessResult(user);
|
|
|
+// } else {
|
|
|
+// return ResultGenerator.genFailResult(ResultCode.UNLOGIN_PWD_ERROR);
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
/**
|
|
|
* 通过userId获取菜单,需要TOKEN的.
|
|
|
*
|