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配置类访问上一篇、不重复写了,重点代码已粘贴。

 

posted @ 2021-01-31 01:35  iJunHello  阅读(383)  评论(0)    收藏  举报