1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package com.yaozhitech.spring5.service;
- import java.time.Duration;
- import java.util.Arrays;
- import java.util.List;
- import org.apache.shiro.crypto.hash.Sha256Hash;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import org.springframework.stereotype.Service;
- import com.yaozhitech.spring5.dto.UserDto;
- import com.yaozhitech.spring5.utils.JwtUtils;
- @Service
- public class JwtUserService {
- @Value("${password.salt}")
- private String encryptSalt;
- @Autowired
- private StringRedisTemplate redisTemplate;
- /**
- * 保存user登录信息,返回token
- *
- * @param userDto
- */
- public String generateJwtToken(String username) {
- String salt = JwtUtils.generateSalt();
- redisTemplate.opsForValue().set("token:"+username, salt, Duration.ofSeconds(3600));
- return JwtUtils.sign(username, salt, 3600); // 生成jwt token,设置过期时间为1小时
- }
- /**
- * 获取上次token生成时的salt值和登录用户信息
- *
- * @param username
- * @return
- */
- public UserDto getJwtTokenInfo(String username) {
- String salt = redisTemplate.opsForValue().get("token:"+username);
- UserDto user = getUserInfo(username);
- user.setSalt(salt);
- return user;
- }
- /**
- * 清除token信息
- *
- * @param userName 登录用户名
- * @param terminal 登录终端
- */
- public void deleteLoginInfo(String username) {
- redisTemplate.delete("token:"+username);
- }
- /**
- * 获取数据库中保存的用户信息,主要是加密后的密码
- *
- * @param userName
- * @return
- */
- public UserDto getUserInfo(String userName) {
- UserDto user = new UserDto();
- user.setUserId(1L);
- user.setUsername("admin");
- user.setEncryptPwd(new Sha256Hash("123456", encryptSalt).toHex());
- return user;
- }
- /**
- * 获取用户角色列表,强烈建议从缓存中获取
- *
- * @param userId
- * @return
- */
- public List<String> getUserRoles(Long userId) {
- return Arrays.asList("admin");
- }
- }
|