springboot+springsecurity+jwt+redis集成的時候RediUtil報錯
網上有的人說是依賴版本問題,有的人說將@Autowired改爲@Resource,都試了,但是沒用,哪位大佬知道怎麼回事?
依賴
<!-- redis組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
RedisUtil工具類
package com.common.code.security.utils;
import com.common.code.utils.DateUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* redis是鍵值對數據庫
* 我們使用java提供的模板工具類,我們就可以直接操作redis,存取token
*/
@Component
//@PropertySource(value = "classpath:application.yml")
public class RedisUtil {
// 從application.yml引入token過期秒數
@Value("${token.expirationSeconds}")
private int expirationSeconds;
// 從application.yml引入有效時間
@Value("${token.validTime}")
private int validTime;
//創建redis模板
@Resource
private RedisTemplate<String, Object> redisTemplate;
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
//構造
public RedisUtil() {
}
/**
* 獲取所有的鍵
* @param key
* @return
*/
public Set<String> keys(String key) {
return this.redisTemplate.keys(key);
}
/**
* 通過鍵名,獲取鍵值對象
* @param key
* @return
*/
public Object get(String key) {
return this.redisTemplate.opsForValue().get(key);
}
/**
* 存鍵值對象
* @param key
* @param value
*/
public void set(String key, String value) {
this.redisTemplate.opsForValue().set(key, value, 7200L, TimeUnit.SECONDS);
}
/**
* 存鍵值對象
* @param key
* @param value
* @param expire 時間(秒) expire要大於0 如果expire小於等於0 將設置無限期
*/
public void set(String key, String value, Integer expire) {
this.redisTemplate.opsForValue().set(key, value, (long)expire, TimeUnit.SECONDS);
}
/**
* 刪除鍵值,即token
* @param key
*/
public void delete(String key) {
this.redisTemplate.opsForValue().getOperations().delete(key);
}
/**
* HashSet
* 向一張hash表中放入數據,如果不存在將創建
* @param key 鍵
* @param filed 值
* @param domain
*/
public void hset(String key, String filed, Object domain) {
this.redisTemplate.opsForHash().put(key, filed, domain);
}
/**
*
* @param key
* @param filed
* @param domain
* @param expire 如果已存在的hash表有時間,這裏將會替換原有的時間
*/
public void hset(String key, String filed, Object domain, Integer expire) {
this.redisTemplate.opsForHash().put(key, filed, domain);
this.redisTemplate.expire(key, (long)expire, TimeUnit.SECONDS);
}
/**
* hashSet
* @param key 鍵
* @param hm 多個鍵值
*/
public void hset(String key, HashMap<String, Object> hm) {
this.redisTemplate.opsForHash().putAll(key, hm);
}
public void hsetAbsent(String key, String filed, Object domain) {
this.redisTemplate.opsForHash().putIfAbsent(key, filed, domain);
}
/**
*
* @param key
* @param field
* @return
*/
public Object hget(String key, String field) {
return this.redisTemplate.opsForHash().get(key, field);
}
public Object hget(String key) {
return this.redisTemplate.opsForHash().entries(key);
}
/**
* 刪除緩存鍵值對
* @param key
*/
public void deleteKey(String key) {
this.redisTemplate.opsForHash().getOperations().delete(key);
}
public Boolean hasKey(String key, String field) {
return this.redisTemplate.opsForHash().hasKey(key, field);
}
/**
* 判斷key是否存在
* @param key
* @return
*/
public Boolean hasKey(String key) {
return this.redisTemplate.opsForHash().getOperations().hasKey(key);
}
/**
* 判斷 token 是否在黑名單內
* @param token
* @return
*/
public Boolean isBlackList(String token) {
return this.hasKey("blacklist", token);
}
/**
* 將 token 添加人黑名單
* @param token
*/
public void addBlackList(String token) {
this.hset("blacklist", token, "true");
}
/**
*
* @param token
* @return
*/
public Object getTokenValidTimeByToken(String token) {
return this.redisTemplate.opsForHash().get(token, "tokenValidTime");
}
/**
* 通過 token 獲取實體名
* @param token
* @return
*/
public Object getUsernameByToken(String token) {
return this.redisTemplate.opsForHash().get(token, "username");
}
/**
* 根據 token 獲取ip
* @param token
* @return
*/
public Object getIPByToken(String token) {
return this.redisTemplate.opsForHash().get(token, "ip");
}
/**
* 通過 token 獲取超時時間
* @param token
* @return
*/
public Object getExpirationTimeByToken(String token) {
return this.redisTemplate.opsForHash().get(token, "expirationTime");
}
/**
* 設置 token 的過期時間、有效時間、實體、ip
* @param token
* @param username
* @param ip
*/
public void setTokenRefresh(String token, String username, String ip) {
Integer expire = this.validTime * 24 * 60 * 60 * 1000;
this.hset(token, "tokenValidTime", DateUtil.getAddDayTime(this.validTime), expire);
this.hset(token, "expirationTime", DateUtil.getAddDaySecond(this.expirationSeconds), expire);
this.hset(token, "username", username, expire);
this.hset(token, "ip", ip, expire);
}
}