You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TokenServiceImpl.java 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /**
  2. * Copyright (c) 2018 人人开源 All rights reserved.
  3. *
  4. * https://www.renren.io
  5. *
  6. * 版权所有,侵权必究!
  7. */
  8. package io.renren.service.impl;
  9. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  10. import io.renren.common.service.impl.BaseServiceImpl;
  11. import io.renren.dao.TokenDao;
  12. import io.renren.entity.TokenEntity;
  13. import io.renren.service.TokenService;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.util.CollectionUtils;
  16. import java.util.Date;
  17. import java.util.List;
  18. import java.util.UUID;
  19. @Service
  20. public class TokenServiceImpl extends BaseServiceImpl<TokenDao, TokenEntity> implements TokenService {
  21. /**
  22. * 12小时后过期
  23. */
  24. private final static int EXPIRE = 3600 * 12;
  25. @Override
  26. public TokenEntity getByToken(String token) {
  27. return baseDao.getByToken(token);
  28. }
  29. @Override
  30. public TokenEntity createToken(Long userId) {
  31. //当前时间
  32. Date now = new Date();
  33. //过期时间
  34. Date expireTime = new Date(now.getTime() + EXPIRE * 1000);
  35. //用户token
  36. String token;
  37. //判断是否生成过token
  38. TokenEntity tokenEntity = baseDao.getByUserId(userId);
  39. if(tokenEntity == null){
  40. //生成一个token
  41. token = generateToken();
  42. tokenEntity = new TokenEntity();
  43. tokenEntity.setUserId(userId);
  44. tokenEntity.setToken(token);
  45. tokenEntity.setUpdateDate(now);
  46. tokenEntity.setExpireDate(expireTime);
  47. //保存token
  48. this.insert(tokenEntity);
  49. }else{
  50. //判断token是否过期
  51. if(tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){
  52. //token过期,重新生成token
  53. token = generateToken();
  54. }else {
  55. token = tokenEntity.getToken();
  56. }
  57. tokenEntity.setToken(token);
  58. tokenEntity.setUpdateDate(now);
  59. tokenEntity.setExpireDate(expireTime);
  60. //更新token
  61. this.updateById(tokenEntity);
  62. }
  63. return tokenEntity;
  64. }
  65. @Override
  66. public void expireTokenByUserId(Long userId){
  67. Date now = new Date();
  68. TokenEntity tokenEntity = new TokenEntity();
  69. tokenEntity.setUserId(userId);
  70. tokenEntity.setUpdateDate(now);
  71. tokenEntity.setExpireDate(now);
  72. this.updateById(tokenEntity);
  73. }
  74. @Override
  75. public void expireToken(String token){
  76. Date now = new Date();
  77. List<TokenEntity> tokenEntities = baseDao.selectList(new QueryWrapper<TokenEntity>().eq("token",token));
  78. if(!CollectionUtils.isEmpty(tokenEntities)){
  79. for(TokenEntity tokenEntity:tokenEntities){
  80. tokenEntity.setUpdateDate(now);
  81. tokenEntity.setExpireDate(now);
  82. baseDao.updateById(tokenEntity);
  83. }
  84. }
  85. }
  86. private String generateToken(){
  87. return UUID.randomUUID().toString().replace("-", "");
  88. }
  89. }