服务端修改密码强制下线

dev
zhang xu 2024-04-12 14:32:28 +08:00
commit 2f251fc7a8
4 changed files with 173 additions and 86 deletions

View File

@ -1,41 +1,28 @@
package com.muyu.common.system.domain; package com.muyu.common.system.domain;
import lombok.AllArgsConstructor;
import java.io.Serializable; import lombok.Data;
import java.util.Set; import lombok.NoArgsConstructor;
/** /**
* * @ClassDescription:
* * @JdkVersion: 17
* @author muyu * @Author: zhangxu
* @Created: 2024/4/12 19:37
*/ */
public class LoginUser implements Serializable { @Data
private static final long serialVersionUID = 1L; @AllArgsConstructor
@NoArgsConstructor
public class LoginUser {
/**
*
*/
private String tokenId;
/** /**
* *
*/ */
private String token; private String userName;
/**
* id
*/
private Long userid;
/**
*
*/
private String username;
/**
*
*/
private Long loginTime;
/**
*
*/
private Long expireTime;
/** /**
* IP * IP
@ -43,58 +30,39 @@ public class LoginUser implements Serializable {
private String ipaddr; private String ipaddr;
/** /**
* *
*/ */
private Set<String> permissions; private String loginLocation;
/** /**
* *
*/ */
private Set<String> roles; private String browser;
/** /**
* *
*/ */
private SysUser sysUser; private String os;
public String getToken () { /**
return token; *
*/
private Long loginTime;
public String getTokenId () {
return tokenId;
} }
public void setToken (String token) { public void setTokenId (String tokenId) {
this.token = token; this.tokenId = tokenId;
} }
public Long getUserid () { public String getUserName () {
return userid; return userName;
} }
public void setUserid (Long userid) { public void setUserName (String userName) {
this.userid = userid; this.userName = userName;
}
public String getUsername () {
return username;
}
public void setUsername (String username) {
this.username = username;
}
public Long getLoginTime () {
return loginTime;
}
public void setLoginTime (Long loginTime) {
this.loginTime = loginTime;
}
public Long getExpireTime () {
return expireTime;
}
public void setExpireTime (Long expireTime) {
this.expireTime = expireTime;
} }
public String getIpaddr () { public String getIpaddr () {
@ -105,27 +73,35 @@ public class LoginUser implements Serializable {
this.ipaddr = ipaddr; this.ipaddr = ipaddr;
} }
public Set<String> getPermissions () { public String getLoginLocation () {
return permissions; return loginLocation;
} }
public void setPermissions (Set<String> permissions) { public void setLoginLocation (String loginLocation) {
this.permissions = permissions; this.loginLocation = loginLocation;
} }
public Set<String> getRoles () { public String getBrowser () {
return roles; return browser;
} }
public void setRoles (Set<String> roles) { public void setBrowser (String browser) {
this.roles = roles; this.browser = browser;
} }
public SysUser getSysUser () { public String getOs () {
return sysUser; return os;
} }
public void setSysUser (SysUser sysUser) { public void setOs (String os) {
this.sysUser = sysUser; this.os = os;
}
public Long getLoginTime () {
return loginTime;
}
public void setLoginTime (Long loginTime) {
this.loginTime = loginTime;
} }
} }

View File

@ -1,5 +1,6 @@
package com.muyu.system.controller; package com.muyu.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.muyu.common.core.constant.UserConstants; import com.muyu.common.core.constant.UserConstants;
import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.core.web.controller.BaseController; import com.muyu.common.core.web.controller.BaseController;
@ -15,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -36,9 +39,12 @@ public class SysMenuController extends BaseController {
public Result list (SysMenu menu) { public Result list (SysMenu menu) {
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuList(menu, userId); List<SysMenu> menus = menuService.selectMenuList(menu, userId);
return success(menus); return success();
} }
/** /**
* *
*/ */

View File

@ -48,9 +48,44 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/ */
@Override @Override
public List<SysMenu> selectMenuList (Long userId) { public List<SysMenu> selectMenuList (Long userId) {
return selectMenuList(new SysMenu(), userId); return selectMenuList(new SysMenu(), userId);
} }
public List<Long> getParentMenuIds(Long userId) {
// 根据用户ID查询系统菜单列表
List<SysMenu> menuList = selectMenuList(userId);
// 用于存储所有父级及以上菜单的ID
List<Long> parentIds = new ArrayList<>();
// 逐个检查每个菜单项的父菜单
for (SysMenu menu : menuList) {
// 获取当前菜单的ID
Long currentMenuId = menu.getMenuId();
// 获取当前菜单的父菜单ID
Long parentMenuId = menu.getParentId();
// 如果父菜单ID不为空则递归查询其父菜单及以上的ID
while (parentMenuId != null) {
// 将父菜单ID加入到结果列表中
parentIds.add(parentMenuId);
// 根据父菜单ID查询父菜单对象
SysMenu parentMenu = getById(parentMenuId);
// 更新当前菜单的父菜单ID为父菜单对象的父菜单ID以便下一轮循环继续查询
parentMenuId = parentMenu != null ? parentMenu.getParentId() : null;
}
}
return parentIds;
}
/** /**
* *
* *
@ -64,13 +99,29 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
// 管理员显示所有菜单信息 // 管理员显示所有菜单信息
if (SysUser.isAdmin(userId)) { if (SysUser.isAdmin(userId)) {
menuList = menuMapper.selectMenuList(menu); menuList = menuMapper.selectMenuList(menu);
// sysRecursion(userId,menuList);
} else { } else {
menu.getParams().put("userId", userId); menu.getParams().put("userId", userId);
menuList = menuMapper.selectMenuListByUserId(menu); menuList = menuMapper.selectMenuListByUserId(menu);
} }
return menuList; return menuList;
} }
// public void sysRecursion(Long parentId,List<SysMenu> sysMenus){
// if (sysMenus==null && sysMenus.isEmpty()){
// return;
// }
//
// for (SysMenu sysMenu : sysMenus) {
// SysMenu build = SysMenu.builder()
// .parentId(parentId)
// .parentName(sysMenu.getParentName())
// .build();
// menuMapper.selectMenuList(build);
// }
// }
/** /**
* ID * ID
* *

View File

@ -1,34 +1,40 @@
package com.muyu.system.service.impl; package com.muyu.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.constant.CacheConstants;
import com.muyu.common.core.constant.UserConstants; import com.muyu.common.core.constant.UserConstants;
import com.muyu.common.core.exception.ServiceException; import com.muyu.common.core.exception.ServiceException;
import com.muyu.common.core.utils.SpringUtils; import com.muyu.common.core.utils.SpringUtils;
import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.core.utils.bean.BeanValidators; import com.muyu.common.core.utils.bean.BeanValidators;
import com.muyu.common.datascope.annotation.DataScope; import com.muyu.common.datascope.annotation.DataScope;
import com.muyu.common.redis.service.RedisService;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.LoginUser;
import com.muyu.common.system.domain.SysRole; import com.muyu.common.system.domain.SysRole;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.system.domain.SysPost; import com.muyu.system.domain.*;
import com.muyu.system.domain.SysUserPost;
import com.muyu.system.domain.SysUserRole;
import com.muyu.system.mapper.*; import com.muyu.system.mapper.*;
import com.muyu.system.service.SysUserService; import com.muyu.system.service.SysUserService;
import com.muyu.system.service.SysConfigService; import com.muyu.system.service.SysConfigService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Validator; import javax.validation.Validator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.muyu.common.core.constant.CacheConstants.LOGIN_TOKEN_KEY;
/** /**
* *
* *
@ -52,6 +58,20 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Autowired @Autowired
private SysConfigService configService; private SysConfigService configService;
@Autowired
private HttpServletRequest request;
@Autowired
private RedisService redisService;
@Autowired
private RedisTemplate<String ,String> redisTemplate;
@Autowired
private SysUserOnlineServiceImpl sysUserOnlineService;
/** /**
* *
* *
@ -347,9 +367,43 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
*/ */
@Override @Override
public int resetPwd (SysUser user) { public int resetPwd (SysUser user) {
return userMapper.updateUser(user);
int updateUser = userMapper.updateUser(user);
if (SecurityUtils.isAdmin(user.getUserId())){
return updateUser;
}
List<SysUserOnline> token = this.token(null, null);
SysUserOnline sysUserOnline1 = token.stream().filter(
sysUserOnline ->
user.getUserName().equals
(sysUserOnline.getUserName())
).findFirst().get();
redisService.deleteObject(LOGIN_TOKEN_KEY+sysUserOnline1.getTokenId());
return updateUser;
} }
public List<SysUserOnline> token(String addr,String userName){
Collection<String> keys = redisService.keys(LOGIN_TOKEN_KEY+"*");
ArrayList<SysUserOnline> sysUserOnlines = new ArrayList<>();
for (String key : keys) {
LoginUser user = redisService.getCacheObject(key);
if (StringUtils.isNotEmpty(addr) && StringUtils.isNotEmpty(userName)){
sysUserOnlines.add(sysUserOnlineService.selectOnlineByInfo(addr,userName,user));
}else if (StringUtils.isNotEmpty(addr)){
sysUserOnlines.add(sysUserOnlineService.selectOnlineByIpaddr(addr,user));
}else if (StringUtils.isNotEmpty(userName)){
sysUserOnlines.add(sysUserOnlineService.selectOnlineByUserName(userName,user));
}else {
sysUserOnlines.add(sysUserOnlineService.loginUserToUserOnline(user));
}
}
Collections.reverse(sysUserOnlines);
sysUserOnlines.remove(Collections.singleton(null));
return sysUserOnlines;
}
/** /**
* *
* *