123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- package com.fdkankan.manage.service.impl;
- import cn.dev33.satoken.stp.SaLoginConfig;
- import cn.dev33.satoken.stp.StpUtil;
- import cn.hutool.extra.servlet.ServletUtil;
- import com.alibaba.fastjson.JSONObject;
- import com.fdkankan.manage.common.ResultCode;
- import com.fdkankan.common.util.Base64Converter;
- import com.fdkankan.common.util.SecurityUtil;
- import com.fdkankan.manage.common.RedisKeyUtil;
- import com.fdkankan.manage.common.ResultCode;
- import com.fdkankan.manage.entity.User;
- import com.fdkankan.manage.exception.BusinessException;
- import com.fdkankan.manage.service.ISysUserService;
- import com.fdkankan.manage.service.IUserService;
- import com.fdkankan.manage.vo.request.ManageLoginRequest;
- import com.fdkankan.manage.vo.response.ManageLoginResponse;
- import com.fdkankan.redis.constant.RedisKey;
- import com.fdkankan.redis.util.RedisUtil;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import javax.servlet.http.HttpServletRequest;
- import java.util.List;
- @Service
- public class ManageService {
- @Autowired
- ISysUserService sysUserService;
- @Autowired
- IUserService userService;
- @Autowired
- RedisUtil redisUtil;
- public ManageLoginResponse login(String ip,String userName, String password) {
- this.checkLoginNum(ip,userName);
- if(StringUtils.isBlank(userName) || StringUtils.isBlank(password)){
- throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
- }
- //对前端传的密码解密
- String passwordMd5 = SecurityUtil.MD52(Base64Converter.decode(Base64Converter.subText(password)));
- ManageLoginResponse result = sysUserService.getUserByUserNameAndPassword(userName, passwordMd5);
- if(result == null){
- this.addLoginErrorNum(ip,userName);
- throw new BusinessException(ResultCode.PASSWORD_ERROR);
- }
- if(result.getStatus() == 0){
- throw new BusinessException(ResultCode.USERNAME_ERROR);
- }
- List<User> byUserName = userService.getByUserName(result.getUserName());
- if(byUserName.size() <=0){
- throw new BusinessException(ResultCode.USERNAME_ERROR);
- }
- User user = byUserName.get(0);
- StpUtil.login(result.getId(), SaLoginConfig
- .setExtra("id",result.getId())
- .setExtra("userId",user.getId())
- .setExtra("isAdmin",1)
- .setExtra("userName",result.getUserName())
- .setExtra("nickName",result.getNickName()));
- result.setToken(StpUtil.getTokenValue());
- result.setUserId(user.getId());
- redisUtil.set(String.format(RedisKeyUtil.loginToken ,result.getToken()), JSONObject.toJSONString(result), 2*60*60);
- String redisUserNameKey = String.format(RedisKeyUtil.loginUserName, userName);
- redisUtil.lRightPush(redisUserNameKey,result.getToken());
- return result;
- }
- public void logout() {
- redisUtil.del(String.format(RedisKeyUtil.loginToken ,StpUtil.getTokenValue()));
- StpUtil.logout();
- }
- public void checkLoginNum(String ip, String userName) {
- if(StringUtils.isNotBlank(userName)){
- String redisKey = String.format(RedisKeyUtil.loginNum,userName,ip);
- if(redisUtil.hasKey(redisKey)){
- String value = redisUtil.get(redisKey);
- if("5".equals(value)){
- throw new BusinessException(ResultCode.LOGIN_NUM_MUCH);
- }
- }
- }
- }
- public void addLoginErrorNum(String ip, String userName) {
- if(StringUtils.isNotBlank(userName)){
- String redisKey = String.format(RedisKeyUtil.loginNum,userName,ip);
- if(redisUtil.hasKey(redisKey)){
- String value = redisUtil.get(redisKey);
- if("5".equals(value)){
- throw new BusinessException(ResultCode.LOGIN_NUM_MUCH);
- }
- Integer num = Integer.parseInt(value) + 1;
- redisUtil.set(redisKey,num.toString(),60 * 5);
- }else {
- redisUtil.set(redisKey,"1",60 * 5);
- }
- }
- }
- public void updateLoginUserStatus(String userName,Integer status) {
- String redisUserNameKey = String.format(RedisKeyUtil.loginUserName, userName);
- List<String> list = redisUtil.hgetValues(redisUserNameKey);
- if(list != null && list.size() >0){
- for (String token : list) {
- String redisKey = String.format(RedisKeyUtil.loginToken, token);
- String userStr = redisUtil.get(redisKey);
- ManageLoginResponse result = JSONObject.parseObject(userStr,ManageLoginResponse.class);
- result.setStatus(status);
- redisUtil.set(redisKey,JSONObject.toJSONString(result), 2*60*60);
- }
- }
- }
- }
|