redis整合jwt已处理重复获取token
1、jwt依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、service
import com.example.vuetest01.library.entity.Userregister;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author IJun
* @since 2021-01-20
*/
public interface UserregisterService extends IService<Userregister> {
public void userLogin(Userregister userregister);
}
3、serviceImpl
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.vuetest01.library.entity.Userregister;
import com.example.vuetest01.library.mapper.UserregisterMapper;
import com.example.vuetest01.library.service.UserregisterService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.vuetest01.library.utils.JWTUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* 服务实现类
* </p>
*
* @author IJun
* @since 2021-01-20
*/
@Service
public class UserregisterServiceImpl extends ServiceImpl<UserregisterMapper, Userregister> implements UserregisterService {
@Autowired
private UserregisterMapper mapper;
@Autowired
@Qualifier("redisTemplates")
private RedisTemplate redisTemplate;
@Override
public void userLogin(Userregister userregister) {
// JSONObject jsonObject=new JSONObject(); boundValueOps 获取对象
//redi获取token
System.out.println("------------------service");
Object users = redisTemplate.opsForValue().get("token");
System.out.println(users+"sssssssss");
// Object o = users.get();
if (users == null){
//数据库查询
QueryWrapper<Userregister> wrapper=new QueryWrapper<>();
wrapper.eq("username",userregister.getUsername());
Userregister userregister1= mapper.selectOne(wrapper);
if ( userregister1 == null){
throw new RuntimeException("登录用户不存在");
}
if (! userregister1.getPassword().equals(userregister.getPassword())){
throw new RuntimeException("登录密码输入错误");
}
//第一步 token
Map<String,String> map1=new HashMap<>();
map1.put("username",userregister1.getUsername());
map1.put("password",userregister1.getPassword());
String token = JWTUtils.getToken(map1);
System.out.println("aaaaaa"+token);
//顺便存入redis中
redisTemplate.opsForValue().set("token",token);
System.out.println("从数据据中取值...");
}else {
System.out.println("从缓存中获取数据...");
try {
JWTUtils.verify(redisTemplate.opsForValue().get("token").toString());
System.out.println("缓存中数据有效...");
} catch (Exception e) {
System.out.println("数据失效...设置重新的获取");
}
}
}
}
5、controller
@Autowired
private UserregisterService userregisterService;
@PostMapping("/register")
@ResponseBody
@CrossOrigin
public void ss(@RequestBody @Validated Userregister userregister ){
System.out.println("前端传的用户名"+userregister.getUsername());
System.out.println("前端传的密码"+userregister.getPassword());
System.out.println("执行成功!");
System.out.println(Md5Utils.inputPassToDBPass(userregister.getPassword(), "zxc123"));
userregister.setPassword(Md5Utils.inputPassToDBPass(userregister.getPassword(), "zxc123"));
userregisterService.saveOrUpdate(userregister);
}
@Autowired
@Qualifier("redisTemplates")
private RedisTemplate redisTemplate;
@GetMapping("/login")
@ResponseBody
//@CrossOrigin @RequestBody @Validated
public Object login( Userregister userregister){
// session.setAttribute(Consts.NAME,userregister.getUsername());
System.out.println("进入login...");
JSONObject jsonObject=new JSONObject();
Map<String,Object> map=new HashMap<>();
try {
userregisterService.userLogin(userregister);
//------------token
String token= redisTemplate.opsForValue().get("token").toString();
jsonObject.put(Consts.CODE,201);
jsonObject.put(Consts.MSG,"认证成功");
jsonObject.put("token",token);// --------------------
} catch (Exception e) {
jsonObject.put(Consts.CODE,500);
jsonObject.put(Consts.MSG,"认证失败");
}
return jsonObject;
}
6、jwt、redis配置类访问上一篇、不重复写了,重点代码已粘贴。

浙公网安备 33010602011771号