From 6091a9cac0ef3236bd05137a5fae9a9cf1913ed4 Mon Sep 17 00:00:00 2001 From: wuyouming666 <2265557248@qq.com> Date: 星期一, 29 四月 2024 16:03:21 +0800 Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes --- hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java | 202 +++----------------------------------------------- 1 files changed, 13 insertions(+), 189 deletions(-) diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java index 2e0cda6..b8f3259 100644 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java +++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java @@ -1,45 +1,29 @@ package com.mes.userinfo.service.impl; -import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.mes.common.config.Const; import com.mes.common.utils.JwtUtil; import com.mes.common.utils.RedisUtil; -import com.mes.common.utils.UserInfoUtils; -import com.mes.entity.request.GeneralRequest; import com.mes.menu.mapper.SysMenuMapper; -import com.mes.role.entity.SysRole; -import com.mes.role.entity.SysRoleMenu; -import com.mes.role.service.SysRoleService; import com.mes.userinfo.entity.LoginUser; import com.mes.userinfo.entity.SysUser; -import com.mes.userinfo.entity.SysUserRole; -import com.mes.userinfo.entity.vo.SysUserVO; import com.mes.userinfo.mapper.SysUserMapper; -import com.mes.userinfo.service.SysUserRoleService; import com.mes.userinfo.service.SysUserService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; +import com.mes.utils.Result; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; import javax.annotation.Resource; -import java.util.*; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; /** * <p> @@ -50,29 +34,18 @@ * @since 2024-04-11 */ @Service -@Slf4j public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService, UserDetailsService { @Autowired private AuthenticationManager authenticationManager; - @Autowired private RedisUtil redisUtil; @Resource private SysMenuMapper sysMenuMapper; - @Resource - private SysUserRoleService sysUserRoleService; - - @Resource - private SysRoleService sysRoleService; - - @Resource - BCryptPasswordEncoder passwordEncoder; - @Override - public Map<String, String> login(SysUser user) { + public Result login(SysUser user) { UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserName(), user.getPassword()); Authentication authenticate = authenticationManager.authenticate(authenticationToken); if (Objects.isNull(authenticate)) { @@ -82,157 +55,23 @@ LoginUser loginUser = (LoginUser) authenticate.getPrincipal(); String userId = loginUser.getUser().getId().toString(); String jwt = JwtUtil.generateToken(userId); - - //鏌ヨ鏉冮檺淇℃伅 -// List<String> perms = sysMenuMapper.selectPermsByUserId(userId); //authenticate瀛樺叆redis redisUtil.setCacheObject("login:" + userId, loginUser); //鎶妕oken鍝嶅簲缁欏墠绔� HashMap<String, String> map = new HashMap<>(); map.put("token", jwt); - return map; + return Result.success(map); } @Override - public String logout() { - log.info("鐢ㄦ埛閫�鍑�"); - SysUser user = UserInfoUtils.get(); - redisUtil.deleteObject("login:" + user.getId()); - return "娉ㄩ攢鎴愬姛"; + public Result logout() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + Long userid = loginUser.getUser().getId(); + redisUtil.deleteObject("login:" + userid); + return Result.success("閫�鍑烘垚鍔�"); } - @Transactional - @Override - public String saveUser(SysUserVO user) { - log.info("淇濆瓨鐢ㄦ埛淇℃伅"); - // 榛樿瀵嗙爜 - String password = passwordEncoder.encode(Const.DEFULT_PASSWORD); - user.setPassword(password); - SysUser sysUser = new SysUser(); - BeanUtils.copyProperties(user, sysUser); - this.save(sysUser); - saveUserRole(user.getRoleList(), sysUser.getId()); - return "success"; - } - - @Transactional - @Override - public SysUserVO updateUser(SysUserVO user) { - log.info("鏇存柊鐢ㄦ埛淇℃伅"); - SysUser sysUser = new SysUser(); - BeanUtils.copyProperties(user, sysUser); - this.updateById(sysUser); - log.info("鍒犻櫎鐢ㄦ埛瑙掕壊淇℃伅"); - List<Long> roleIds = user.getRoleList().stream().map(SysRole::getId).collect(Collectors.toList()); - sysUserRoleService.remove(new LambdaQueryWrapper<SysUserRole>() - .eq(SysUserRole::getUserId, sysUser.getId()).in(CollectionUtil.isNotEmpty(roleIds), SysUserRole::getRoleId, roleIds)); - log.info("淇濆瓨鐢ㄦ埛瑙掕壊淇℃伅"); - saveUserRole(user.getRoleList(), sysUser.getId()); - return user; - } - - @Override - public String resetPassword(Long userId) { - log.info("閲嶇疆瀵嗙爜涓簕}", Const.DEFULT_PASSWORD); - SysUser sysUser = new SysUser(); - sysUser.setId(userId); - String password = passwordEncoder.encode(Const.DEFULT_PASSWORD); - sysUser.setPassword(password); - this.updateById(sysUser); - return "success"; - } - - @Override - public SysUser queryByUserName(String userName) { - return baseMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, userName)); - } - - @Override - public List<SysUserVO> listByUserName(GeneralRequest request) { - MPJLambdaWrapper<SysUser> wrapper = new MPJLambdaWrapper<>(); - wrapper.selectAll(SysUser.class) - .selectCollection(SysRole.class, SysUserVO::getRoleList) - .leftJoin(SysUserRole.class, SysUserRole::getUserId, SysUser::getId) - .leftJoin(SysRole.class, SysRole::getId, SysUserRole::getRoleId) - .like(StringUtils.hasText(request.getKey()), SysUser::getUserName, request.getKey()); - return baseMapper.selectJoinList(SysUserVO.class, wrapper); - } - - @Transactional - @Override - public String deleteUser(List<Long> ids) { - this.removeByIds(ids); - sysUserRoleService.remove(new QueryWrapper<SysUserRole>().in("user_id", ids)); - return "success"; - - } - - @Override - public List<String> getUserAuthorityInfo(Long userId) { - SysUser sysUser = baseMapper.selectById(userId); - - // ROLE_admin,ROLE_normal,sys:user:list,.... - String authority = ""; - if (redisUtil.hasKey("GrantedAuthority:" + sysUser.getUserName())) { - authority = redisUtil.getCacheObject("GrantedAuthority:" + sysUser.getUserName()); - - } else { - // 鑾峰彇瑙掕壊缂栫爜 - List<SysRole> roles = sysRoleService.list(new QueryWrapper<SysRole>() - .inSql("id", "select role_id from sys_user_role where user_id = " + userId)); - - if (roles.size() > 0) { - String roleCodes = roles.stream().map(r -> "ROLE_" + r.getRoleKey()).collect(Collectors.joining(",")); - authority = roleCodes.concat(","); - } - - // 鑾峰彇鑿滃崟鎿嶄綔缂栫爜 - List<String> perms = sysMenuMapper.selectPermsByUserId(userId); - if (perms.size() > 0) { - String menuPerms = String.join(",", perms); - authority = authority.concat(menuPerms); - } - - redisUtil.setCacheObject("GrantedAuthority:" + sysUser.getUserName(), authority, 60 * 60, TimeUnit.SECONDS); - } - return Arrays.stream(authority.split(",")).collect(Collectors.toList()); - } - - @Override - public void clearUserAuthorityInfo(String userName) { - redisUtil.deleteObject("GrantedAuthority:" + userName); - } - - @Override - public void clearUserAuthorityInfoByRoleId(Long roleId) { - List<SysUser> sysUsers = this.list(new QueryWrapper<SysUser>() - .inSql("id", "select user_id from sys_user_role where role_id = " + roleId)); - - sysUsers.forEach(u -> { - this.clearUserAuthorityInfo(u.getUserName()); - }); - - } - - @Override - public void clearUserAuthorityInfoByMenuId(Long menuId) { - MPJLambdaWrapper<SysUserRole> wrapper = new MPJLambdaWrapper<SysUserRole>().selectAll(SysUser.class).distinct() - .leftJoin(SysUser.class, SysUser::getId, SysUserRole::getUserId) - .leftJoin(SysRoleMenu.class, SysRoleMenu::getRoleId, SysUserRole::getRoleId) - .eq(SysRoleMenu::getMenuId, menuId); - List<SysUser> sysUsers = sysUserRoleService.selectJoinList(SysUser.class, wrapper); - sysUsers.forEach(u -> { - this.clearUserAuthorityInfo(u.getUserName()); - }); - } - - /** - * 瀹炵幇UserDetailsService鎺ュ彛锛屼粠鏁版嵁搴撳唴鑾峰彇鐢ㄦ埛鍙婃潈闄愪俊鎭� - * - * @param username - * @return - * @throws UsernameNotFoundException - */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>(); @@ -247,19 +86,4 @@ return new LoginUser(user, perms); } - - - private void saveUserRole(List<SysRole> roles, Long userId) { - log.info("淇濆瓨鐢ㄦ埛瑙掕壊淇℃伅"); - List<SysUserRole> userRoles = new ArrayList<>(); - if (CollectionUtils.isEmpty(roles)) { - log.info("淇濆瓨鐢ㄦ埛瑙掕壊淇℃伅涓虹┖锛岀粰榛樿鏅�氱敤鎴疯鑹�"); - userRoles.add(new SysUserRole(userId, Const.DEFULT_ROLE)); - } else { - log.info("淇濆瓨鐢ㄦ埛瑙掕壊淇℃伅"); - userRoles = roles.stream().map(e -> new SysUserRole(userId, e.getId())).collect(Collectors.toList()); - } - sysUserRoleService.saveBatch(userRoles); - } - } -- Gitblit v1.8.0