1 環境
- Ubuntu18.04
- Java1.8.0_191
- Spring Boot2.0.4.RELEASE
2 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3 Redis配置
spring:
redis:
database: 0
host: 127.0.0.1
port: 6379
password: your-password
jedis:
pool:
max-active: 8
max-idle: 8
max-wait: -1ms
min-idle: 0
server:
port: 8090
4 接口
package com.company.web.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.concurrent.TimeUnit;
import java.util.UUID;
@CrossOrigin(origins="*", maxAge=3600)
@RestController
@RequestMapping("/token")
public class TokenByRedisController {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 依據userId生成Token,存儲到Redis中,
* 數據過期時間單位爲分鐘,如設定爲1分鐘
* 數據結構爲userId:token
* @param userId
* @return
*/
@RequestMapping(value="/add", params="userId",method=RequestMethod.PUT)
public String setToken(@RequestParam("userId") String userId){
// redisTemplate.opsForValue().set("token","123456token");
String token = UUID.randomUUID().toString();
redisTemplate.opsForValue().set(userId, token, 1, TimeUnit.MINUTES);
return "success";
}
/**
* 依據userId刪除Redis中的Token
* @param userId
* @return
*/
@RequestMapping(value="/delete", params="userId", method=RequestMethod.DELETE)
public String delToken(@RequestParam("userId") String userId){
Boolean isDelToken = redisTemplate.delete(userId);
if(isDelToken){
return "success";
}else{
return "failed";
}
}
/**
* 依據userId獲取Redis中對應的Token
* @param userId
* @return
*/
@RequestMapping(value="/get", params="userId", method=RequestMethod.GET)
public String getToken(@RequestParam("userId") String userId){
String token = redisTemplate.opsForValue().get(userId);
if(token == null){
return "Token已過期";
}else{
return token;
}
}
/**
* 依據userId和Token請求數據,
* 若Token過期或錯誤,需要重新獲取Token
* @param userId
* @param token
* @return
*/
@RequestMapping(value="/datas-search", params={"userId", "token"},method=RequestMethod.GET)
public Map searchDatas(@RequestParam("userId") String userId,@RequestParam("token") String token){
Map returnMap = new HashMap();
String tokenInMemory = redisTemplate.opsForValue().get(userId);
try{
if(tokenInMemory == null){
returnMap.put("code", 201);
returnMap.put("msg", "Token過期,請重新獲取");
// return returnMap;
}else{
if(tokenInMemory.equals(token)){
returnMap.put("code", 200);
returnMap.put("token", token);
returnMap.put("msg", "請求成功");
}else{
returnMap.put("code", 202);
returnMap.put("msg", "Token無效,請傳入正確的數據");
// return returnMap;
}
}
return returnMap;
}catch(Exception e){
e.printStackTrace();
}
returnMap.put("code", 400);
returnMap.put("msg", "參數異常,請檢查參數");
return returnMap;
}
}
【參考文獻】
[1]https://www.cnblogs.com/wusiwee/p/10418379.html
[2]https://www.cnblogs.com/jaythc/p/10200338.html
[3]https://blog.csdn.net/sunhongbing1024/article/details/82017614