Coverage Summary for Class: UserServiceImpl (cn.edu.ecnu.stu.bookstore.service.impl)
Class |
Class, %
|
Method, %
|
Line, %
|
UserServiceImpl |
100%
(1/1)
|
100%
(7/7)
|
87.5%
(28/32)
|
package cn.edu.ecnu.stu.bookstore.service.impl;
import cn.edu.ecnu.stu.bookstore.component.AppException;
import cn.edu.ecnu.stu.bookstore.component.Constants;
import cn.edu.ecnu.stu.bookstore.mapper.UserMapper;
import cn.edu.ecnu.stu.bookstore.pojo.LoginUser;
import cn.edu.ecnu.stu.bookstore.pojo.User;
import cn.edu.ecnu.stu.bookstore.service.UserService;
import cn.edu.ecnu.stu.bookstore.utils.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
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.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private RedisTemplate redisTemplate;
public void register(User user) {
if(!StringUtils.hasLength(user.getUsername()))
throw new AppException(Constants.CLIENT_ERROR, Constants.PARAMETER_ERROR_MESSAGE);
if(userMapper.checkUserByUsername(user.getUsername()) != 0)
throw new AppException(Constants.CLIENT_ERROR, Constants.REGISTER_ERROR_MESSAGE);
String encoded = passwordEncoder.encode(user.getPassword());
user.setPassword(encoded);
userMapper.insert(user);
}
public void unregister(User user) {
User user1 = userMapper.selectOneByName(user.getUsername());
if(user1 == null || !passwordEncoder.matches(user.getPassword(), user1.getPassword())) {
throw new AppException(Constants.CLIENT_ERROR, Constants.PASSWORD_ERROR);
}
userMapper.deleteByName(user.getUsername());
}
public User selectUserByName(String username) {
return userMapper.selectOneByName(username);
}
public Map<String, Object> login(User user) {
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());
Authentication authenticate = authenticationManager.authenticate(token);
LoginUser loginUser = (LoginUser)authenticate.getPrincipal();
User user1 = loginUser.getUser();
redisTemplate.opsForValue().set("userId:" + user1.getId(), "1", 1, TimeUnit.DAYS);
Map<String, Object> map = new HashMap<>();
map.put("token", JwtUtil.getToken(user1));
map.put("user", user1);
return map;
}
public void logout(String username) {
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if(!user.getUsername().equals(username)) {
throw new AppException(Constants.CLIENT_ERROR, Constants.PARAMETER_ERROR_MESSAGE);
}
redisTemplate.delete("userId:" + user.getId());
}
public void changePassword(String username, String oldPassword, String newPassword) {
User user = userMapper.selectOneByName(username);
if(user == null || !passwordEncoder.matches(oldPassword, user.getPassword())){
throw new AppException(Constants.CLIENT_ERROR, Constants.PASSWORD_ERROR);
}
newPassword = passwordEncoder.encode(newPassword);
userMapper.updatePassword(username, newPassword);
redisTemplate.delete("userId:" + user.getId());
}
}