1 package com.shengwei.businessschoolapi.service; 2 3 import com.shengwei.businessschoolapi.dao.WxTokenDao; 4 import com.shengwei.businessschoolapi.model.TokenEntity; 5 import com.shengwei.businessschoolapi.util.TimeUtil; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 9 import java.util.Date; 10 import java.util.UUID; 11 12 @Service 13 public class TokenService { 14 15 @Autowired 16 private WxTokenDao tokenDao; 17 18 //12小时后过期 19 private final static int EXPIRE = 3600 * 12; 20 21 /** 22 * 根据用户id查询 23 * @param id 24 * @return 25 */ 26 public TokenEntity queryByUserId(Long id) { 27 return tokenDao.findOne(id); 28 } 29 30 /** 31 * 根据token查询用户 32 * @param token 33 * @return 34 */ 35 public TokenEntity queryByToken(String token) { 36 return tokenDao.findByTokenNumber(token); 37 } 38 39 /** 40 * 添加或修改 41 * @param token 42 */ 43 public void saveorUpdata(TokenEntity token) { 44 tokenDao.save(token); 45 } 46 47 48 /** 49 * 创建的一个token 50 * @param userId 51 * @return 52 */ 53 public TokenEntity createToken(long userId) { 54 //生成一个token 55 String token = UUID.randomUUID().toString().replace("-", ""); 56 //当前时间 57 Date now = new Date(); 58 //过期时间 59 Date expireTime = new Date(now.getTime() + EXPIRE * 1000); 60 61 //判断是否生成过token 62 TokenEntity tokenEntity = queryByUserId(userId); 63 if (tokenEntity == null) { 64 tokenEntity = new TokenEntity(); 65 tokenEntity.setUserid(userId); 66 tokenEntity.setTokenNumber(token); 67 //转换数据库时间 68 tokenEntity.setToUpdateTime(TimeUtil.getTimestamp(now)); 69 tokenEntity.setExpirationTime(TimeUtil.getTimestamp(expireTime)); 70 //保存token 71 this.saveorUpdata(tokenEntity); 72 } else { 73 tokenEntity.setTokenNumber(token); 74 tokenEntity.setToUpdateTime(TimeUtil.getTimestamp(now)); 75 tokenEntity.setExpirationTime(TimeUtil.getTimestamp(expireTime)); 76 //更新token 77 this.saveorUpdata(tokenEntity); 78 } 79 return tokenEntity; 80 } 81 82 /** 83 * 查询用户是否存在 84 * @param token 85 * @return 86 */ 87 public Long getUserId(String token) { 88 TokenEntity tokenEntity= tokenDao.findByTokenNumber(token); 89 if (tokenEntity == null){ 90 return null; 91 } 92 if (tokenEntity.getExpirationTime().before(new Date())){ 93 return null; 94 } 95 return tokenEntity.getUserid(); 96 } 97 98 /** 99 * 拿到用户 sessionKey 100 * @param userId 101 * @return 102 */ 103 public String getSessionKey(Integer userId) { 104 TokenEntity tokenEntity= queryByUserId(userId.longValue()); 105 if (tokenEntity==null){ 106 return null; 107 } 108 if (tokenEntity.getExpirationTime().before(new Date())){ 109 return null; 110 } 111 return tokenEntity.getWxSessionkey(); 112 } 113 }
提示:Dao层采用springDatajpa实现