UserService.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.yaozhitech.spring5.service;
  2. import java.time.Duration;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import org.apache.shiro.crypto.hash.Sha256Hash;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.data.redis.core.StringRedisTemplate;
  9. import org.springframework.stereotype.Service;
  10. import com.yaozhitech.spring5.dto.UserDto;
  11. import com.yaozhitech.spring5.utils.JwtUtils;
  12. @Service
  13. public class UserService {
  14. @Value("${password.salt}")
  15. private String encryptSalt;
  16. @Autowired
  17. private StringRedisTemplate redisTemplate;
  18. /**
  19. * 保存user登录信息,返回token
  20. *
  21. * @param userDto
  22. */
  23. public String generateJwtToken(String username) {
  24. String salt = JwtUtils.generateSalt();
  25. redisTemplate.opsForValue().set("token:"+username, salt, Duration.ofSeconds(3600));
  26. return JwtUtils.sign(username, salt, 3600); // 生成jwt token,设置过期时间为1小时
  27. }
  28. /**
  29. * 获取上次token生成时的salt值和登录用户信息
  30. *
  31. * @param username
  32. * @return
  33. */
  34. public UserDto getJwtTokenInfo(String username) {
  35. String salt = redisTemplate.opsForValue().get("token:"+username);
  36. UserDto user = getUserInfo(username);
  37. user.setSalt(salt);
  38. return user;
  39. }
  40. /**
  41. * 清除token信息
  42. *
  43. * @param userName 登录用户名
  44. * @param terminal 登录终端
  45. */
  46. public void deleteLoginInfo(String username) {
  47. redisTemplate.delete("token:"+username);
  48. }
  49. /**
  50. * 获取数据库中保存的用户信息,主要是加密后的密码
  51. *
  52. * @param userName
  53. * @return
  54. */
  55. public UserDto getUserInfo(String userName) {
  56. UserDto user = new UserDto();
  57. user.setUserId(1L);
  58. user.setUsername("admin");
  59. user.setEncryptPwd(new Sha256Hash("123456", encryptSalt).toHex());
  60. return user;
  61. }
  62. /**
  63. * 获取用户角色列表,强烈建议从缓存中获取
  64. *
  65. * @param userId
  66. * @return
  67. */
  68. public List<String> getUserRoles(Long userId) {
  69. return Arrays.asList("admin");
  70. }
  71. }