app用户登录
This commit is contained in:
parent
55b3d0ab29
commit
dc10e56fe0
|
|
@ -0,0 +1,174 @@
|
|||
package com.bonus.imgTool.system.controller;
|
||||
|
||||
import com.bonus.imgTool.annotation.DecryptAndVerify;
|
||||
import com.bonus.imgTool.annotation.LogAnnotation;
|
||||
import com.bonus.imgTool.backstage.entity.QueryParamDto;
|
||||
import com.bonus.imgTool.model.Permission;
|
||||
import com.bonus.imgTool.model.SysLogs;
|
||||
import com.bonus.imgTool.model.SysUser;
|
||||
import com.bonus.imgTool.system.dao.PermissionDao;
|
||||
import com.bonus.imgTool.system.dao.SysConfigDao;
|
||||
import com.bonus.imgTool.system.dao.SysLogsDao;
|
||||
import com.bonus.imgTool.system.dao.UserDao;
|
||||
import com.bonus.imgTool.system.service.TokenService;
|
||||
import com.bonus.imgTool.system.service.UserService;
|
||||
import com.bonus.imgTool.system.vo.*;
|
||||
import com.bonus.imgTool.utils.*;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
|
||||
import org.springframework.security.authentication.DisabledException;
|
||||
import org.springframework.security.authentication.LockedException;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @Author:liang.chao
|
||||
* @Date:2025/4/16 - 16:45
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/loginApp")
|
||||
@Slf4j
|
||||
public class LoginController {
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@Resource
|
||||
private PermissionDao permissionDao;
|
||||
|
||||
@Resource
|
||||
private SysConfigDao sysConfigDao;
|
||||
|
||||
@Resource
|
||||
private SysLogsDao sysLogsDao;
|
||||
|
||||
@Resource
|
||||
private UserDao userDao;
|
||||
|
||||
@Autowired
|
||||
private TokenService tokenService;
|
||||
|
||||
@Autowired
|
||||
private BCryptPasswordEncoder passwordEncoder;
|
||||
|
||||
@ApiOperation("APP登录")
|
||||
@PostMapping
|
||||
@DecryptAndVerify(decryptedClass = UserDto.class)
|
||||
public Token loginApp(EncryptedReq<UserDto> user) {
|
||||
String userName = user.getData().getUsername();
|
||||
String passWord = user.getData().getPassword();
|
||||
SysUser sysUser = userService.getUser(userName);
|
||||
|
||||
if (sysUser != null && !passwordEncoder.matches(passWord, sysUser.getPassword())) {
|
||||
throw new AuthenticationCredentialsNotFoundException("用户名/密码错误!");
|
||||
}
|
||||
|
||||
userConfig(sysUser);
|
||||
LoginUser loginUser = new LoginUser();
|
||||
BeanUtils.copyProperties(sysUser, loginUser);
|
||||
List<Permission> permissions = permissionDao.listByUserId(sysUser.getId());
|
||||
loginUser.setPermissions(permissions);
|
||||
Token token = tokenService.saveToken(loginUser);
|
||||
saveLogs(loginUser, "成功", "登录成功");
|
||||
userDao.updateLoginTime(loginUser);
|
||||
redisUtil.set(RedisPerfixUtil.USER_STATE + ":" + loginUser.getLoginName(), "1", 60 * 5);
|
||||
return token;
|
||||
}
|
||||
|
||||
public void userConfig(SysUser user) {
|
||||
if (user == null) {
|
||||
throw new AuthenticationCredentialsNotFoundException("用户名/密码错误!");
|
||||
}
|
||||
|
||||
long num = 0L;
|
||||
try {
|
||||
num = redisUtil.countKeys();//在线用户
|
||||
} catch (Exception e) {
|
||||
throw new LockedException("redis未连接,请检查服务!");
|
||||
}
|
||||
|
||||
SysConfigVo sysConfigVo0 = sysConfigDao.getSysConfigByCode("sys_user_concurrency");//并发
|
||||
String nums = sysConfigVo0.getSystemValue();
|
||||
if (num > Integer.parseInt(nums)) {
|
||||
throw new LockedException("系统繁忙,请稍后重试");
|
||||
}
|
||||
SysConfigVo sysConfigVo = sysConfigDao.getSysConfigByCode("sys_err_time");//锁定时间
|
||||
String times = sysConfigVo.getSystemValue();
|
||||
String looker = redisUtil.get("lock", user.getLoginName());
|
||||
if (StringHelper.isEmpty(looker)) {//用户锁定
|
||||
if ("1".equals(looker)) {
|
||||
throw new LockedException("用户被锁定,请" + times + "分钟后重试");
|
||||
}
|
||||
}
|
||||
if (user == null) {
|
||||
saveLogs(user, "失败", "用户名或密码错误");
|
||||
throw new AuthenticationCredentialsNotFoundException("用户名或密码错误");
|
||||
} else {
|
||||
if (StringHelper.isNotEmpty(user.getLoginType())) {
|
||||
if (!user.getLoginType().contains("3")) {
|
||||
saveLogs(user, "失败", "用户未授权请联系管理员授权");
|
||||
throw new AuthenticationCredentialsNotFoundException("用户未授权请联系管理员授权");
|
||||
}
|
||||
int state = user.getState();
|
||||
if (0 == state) {
|
||||
saveLogs(user, "失败", "用户未激活");
|
||||
throw new DisabledException("用户未激活,请联系管理员");
|
||||
} else if (2 == state) {
|
||||
saveLogs(user, "失败", "用户被锁定");
|
||||
throw new LockedException("用户被锁定,请" + times + "分钟后重试");
|
||||
}
|
||||
} else {
|
||||
saveLogs(user, "失败", "用户未授权请联系管理员授权");
|
||||
throw new AuthenticationCredentialsNotFoundException("用户未授权请联系管理员授权");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void saveLogs(SysUser user, String result, String msg) {
|
||||
try {
|
||||
SysLogs sysLogs = new SysLogs();
|
||||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
||||
sysLogs.setUserId(user.getId() + "");//用户id
|
||||
sysLogs.setOperatorUser(user.getLoginName());//用户名
|
||||
sysLogs.setIp(WebUtils.getIpAddr(request));//ip
|
||||
sysLogs.setId(UUID.randomUUID().toString().replace("-", "") + "");//主键
|
||||
sysLogs.setUri("/login");//请求路径
|
||||
sysLogs.setMethod("/login.login()");//方法名称
|
||||
//获取参数
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
sysLogs.setOperatorModel("系统登录");//操作模块
|
||||
sysLogs.setOperatorType("登录");//操作类型 怎删改查
|
||||
sysLogs.setLogsType("系统日志");//日志类型 业务日志/系统日志
|
||||
sysLogs.setOperatorDetail("用户登录");//操作详情
|
||||
sysLogs.setOperateTime(DateTimeHelper.getNowTime());
|
||||
sysLogs.setResult(result);
|
||||
sysLogs.setFailureReason(msg);
|
||||
sysLogs.setTypes("0");
|
||||
sysLogsDao.save(sysLogs);
|
||||
} catch (Exception e) {
|
||||
log.error(e.toString(), e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue