package com.nms.swspkmas_standalone.service.impl;
|
|
import cn.hutool.crypto.digest.MD5;
|
import com.nms.swspkmas_standalone.entity.User;
|
import com.nms.swspkmas_standalone.entity.vo.AccountVO;
|
import com.nms.swspkmas_standalone.exception.ApiException;
|
import com.nms.swspkmas_standalone.filter.JwtFilter;
|
import com.nms.swspkmas_standalone.service.AccountService;
|
import com.nms.swspkmas_standalone.utils.JwtTokenUtil;
|
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.authc.*;
|
import org.apache.shiro.subject.Subject;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
|
@Service
|
public class AccountServiceImpl implements AccountService {
|
@Override
|
public AccountVO login(AccountVO accountVO) {
|
String userName = accountVO.getUsername();
|
String password = accountVO.getPassword();
|
// 获取当前用户主体
|
Subject subject = SecurityUtils.getSubject();
|
String msg ;
|
// 将用户名和密码封装成 UsernamePasswordToken 对象
|
UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
|
try {
|
subject.login(token);
|
Object principal = subject.getPrincipal();
|
User user = (User) principal;
|
|
AccountVO acc = new AccountVO();
|
BeanUtils.copyProperties(user, acc,new String[]{"password"});
|
// 若登录成功,签发 JWT token
|
String jwtToken = JwtTokenUtil.generateToken(userName);
|
acc.setToken(jwtToken);
|
JwtFilter.tokenMap.put(MD5.create().digestHex(jwtToken), jwtToken);
|
return acc;
|
} catch (UnknownAccountException | IncorrectCredentialsException uae) { // 账号不存在
|
throw new ApiException("用户名/密码错误,请重新输入");
|
} // 账号与密码不匹配
|
catch (LockedAccountException lae) { // 账号已被锁定
|
msg = "用户名/密码错误,请重新输入";
|
throw new ApiException(msg);
|
} catch (AuthenticationException ae) { // 其他身份验证异常
|
msg = "用户名/密码错误,请重新输入";
|
throw new ApiException(msg);
|
}
|
}
|
}
|