package com.mes.userinfo.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.mes.common.utils.JwtUtil;
|
import com.mes.common.utils.RedisUtil;
|
import com.mes.menu.mapper.SysMenuMapper;
|
import com.mes.userinfo.entity.LoginUser;
|
import com.mes.userinfo.entity.SysUser;
|
import com.mes.userinfo.mapper.SysUserMapper;
|
import com.mes.userinfo.service.SysUserService;
|
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.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* <p>
|
* 用户表 服务实现类
|
* </p>
|
*
|
* @author zhoush
|
* @since 2024-04-11
|
*/
|
@Service
|
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService, UserDetailsService {
|
|
@Autowired
|
private AuthenticationManager authenticationManager;
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Resource
|
private SysMenuMapper sysMenuMapper;
|
|
@Override
|
public Result login(SysUser user) {
|
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserName(), user.getPassword());
|
Authentication authenticate = authenticationManager.authenticate(authenticationToken);
|
if (Objects.isNull(authenticate)) {
|
throw new RuntimeException("用户名或密码错误");
|
}
|
//使用userid生成token
|
LoginUser loginUser = (LoginUser) authenticate.getPrincipal();
|
String userId = loginUser.getUser().getId().toString();
|
String jwt = JwtUtil.generateToken(userId);
|
//authenticate存入redis
|
redisUtil.setCacheObject("login:" + userId, loginUser);
|
//把token响应给前端
|
HashMap<String, String> map = new HashMap<>();
|
map.put("token", jwt);
|
return Result.success(map);
|
}
|
|
@Override
|
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("退出成功");
|
}
|
|
@Override
|
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
|
LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
|
lqw.eq(SysUser::getUserName, username);
|
SysUser user = this.baseMapper.selectOne(lqw);
|
//判断是否为空
|
if (Objects.isNull(user)) {
|
throw new RuntimeException("用户名或密码错误");
|
}
|
//查询权限信息
|
List<String> perms = sysMenuMapper.selectPermsByUserId(user.getId());
|
|
return new LoginUser(user, perms);
|
}
|
}
|