RedisService.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.jsh.erp.service;
  2. import com.jsh.erp.constants.BusinessConstants;
  3. import com.jsh.erp.utils.StringUtil;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.data.redis.core.RedisTemplate;
  6. import org.springframework.data.redis.core.ValueOperations;
  7. import org.springframework.data.redis.serializer.RedisSerializer;
  8. import org.springframework.data.redis.serializer.StringRedisSerializer;
  9. import org.springframework.stereotype.Component;
  10. import javax.annotation.Resource;
  11. import javax.servlet.http.HttpServletRequest;
  12. import java.util.Set;
  13. import java.util.concurrent.TimeUnit;
  14. /**
  15. * Description
  16. *
  17. * @author jisheng hua
  18. * @Date: 2021/1/28 18:10
  19. */
  20. @Component
  21. public class RedisService {
  22. @Resource
  23. public RedisTemplate redisTemplate;
  24. public static final String ACCESS_TOKEN = "X-Access-Token";
  25. @Autowired(required = false)
  26. public void setRedisTemplate(RedisTemplate redisTemplate) {
  27. RedisSerializer stringSerializer = new StringRedisSerializer();
  28. redisTemplate.setKeySerializer(stringSerializer);
  29. redisTemplate.setValueSerializer(stringSerializer);
  30. redisTemplate.setHashKeySerializer(stringSerializer);
  31. redisTemplate.setHashValueSerializer(stringSerializer);
  32. this.redisTemplate = redisTemplate;
  33. }
  34. /**
  35. * @author jisheng hua
  36. * description:
  37. * 从session中获取信息
  38. *@date: 2021/1/28 18:10
  39. * @Param: request
  40. * @Param: key
  41. * @return Object
  42. */
  43. public Object getObjectFromSessionByKey(HttpServletRequest request, String key){
  44. Object obj=null;
  45. if(request==null){
  46. return null;
  47. }
  48. String token = request.getHeader(ACCESS_TOKEN);
  49. if(token!=null) {
  50. //开启redis,用户数据放在redis中,从redis中获取
  51. if(redisTemplate.opsForHash().hasKey(token,key)){
  52. //redis中存在,拿出来使用
  53. obj=redisTemplate.opsForHash().get(token,key);
  54. redisTemplate.expire(token, BusinessConstants.MAX_SESSION_IN_SECONDS, TimeUnit.SECONDS);
  55. }
  56. }
  57. return obj;
  58. }
  59. /**
  60. * 获得缓存的基本对象。
  61. *
  62. * @param key 缓存键值
  63. * @return 缓存键值对应的数据
  64. */
  65. public <T> T getCacheObject(final String key)
  66. {
  67. ValueOperations<String, T> operation = redisTemplate.opsForValue();
  68. return operation.get(key);
  69. }
  70. /**
  71. * @author jisheng hua
  72. * description:
  73. * 将信息放入session或者redis中
  74. *@date: 2021/1/28 18:10
  75. * @Param: request
  76. * @Param: key
  77. * @Param: obj
  78. * @return
  79. */
  80. public void storageObjectBySession(String token, String key, Object obj) {
  81. //开启redis,用户数据放到redis中
  82. redisTemplate.opsForHash().put(token, key, obj.toString());
  83. redisTemplate.expire(token, BusinessConstants.MAX_SESSION_IN_SECONDS, TimeUnit.SECONDS);
  84. }
  85. /**
  86. * @author jisheng hua
  87. * description:
  88. * 将信息放入session或者redis中
  89. * @date: 2024/5/28 20:10
  90. * @return
  91. */
  92. public void storageCaptchaObject(String verifyKey, String codeNum) {
  93. //把验证码放到redis中
  94. redisTemplate.opsForValue().set(verifyKey, codeNum, BusinessConstants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
  95. }
  96. /**
  97. * 删除单个对象
  98. *
  99. * @param key
  100. */
  101. public boolean deleteObject(final String key)
  102. {
  103. return redisTemplate.delete(key);
  104. }
  105. /**
  106. * @author jisheng hua
  107. * description:
  108. * 将信息从session或者redis中移除
  109. *@date: 2021/1/28 18:10
  110. * @Param: request
  111. * @Param: key
  112. * @Param: obj
  113. * @return
  114. */
  115. public void deleteObjectBySession(HttpServletRequest request, String key){
  116. if(request!=null){
  117. String token = request.getHeader(ACCESS_TOKEN);
  118. if(StringUtil.isNotEmpty(token)){
  119. //开启redis,用户数据放在redis中,从redis中删除
  120. redisTemplate.opsForHash().delete(token, key);
  121. }
  122. }
  123. }
  124. /**
  125. * @author jisheng hua
  126. * 将信息从redis中移除,比对user和ip
  127. * @param userId
  128. * @param clientIp
  129. */
  130. public void deleteObjectByUserAndIp(Long userId, String clientIp){
  131. Set<String> tokens = redisTemplate.keys("*");
  132. for(String token : tokens) {
  133. Object userIdValue = redisTemplate.opsForHash().get(token, "userId");
  134. Object clientIpValue = redisTemplate.opsForHash().get(token, "clientIp");
  135. if(userIdValue!=null && clientIpValue!=null && userIdValue.equals(userId.toString()) && clientIpValue.equals(clientIp)) {
  136. redisTemplate.opsForHash().delete(token, "userId");
  137. }
  138. }
  139. }
  140. }