Token令牌 Redis 案例

关注 “弋凡”(YiFan)微信公众号吧 记录简单笔记 做你的最爱
SpringBoot 整合 Redis 看之前文章

Token 是什么?

token 专业术语为 令牌,更通俗来说就相当于暗号,一般用于身份验证的时候,用token更加的安全,

Token 怎么用?

一般通过ajax发送请求,服务器接收请求去验证用户名和密码,然后返回给客户端一串字符串(token),客户端接收这个token把它存在Cookie 或者Local Storage中
客户端每次请求资源的时候需要携带这个token,服务器去接收这个token然后去验证,成功则返回请求需要的数据

Token 存在 Redis

1,导入依赖


    org.springframework.boot
    spring-boot-starter-data-redis
    2.2.6.RELEASE

2,编写 application.properties

# redis 配置
spring.redis.host=127.0.0.1
spring.redis.port=6379

server.port=999
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.thymeleaf.cache = false
# 实体类的包扫描--- 这里使用了 MybatisPlus
mybatis-plus.type-aliases-package =com.yifan.pojo

3,添加 RedisConfig 以及

封装好的 RedisUtil(之前文章有叙述)

4,编写Controller

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yifan.pao.Result;
import com.yifan.pojo.User;
import com.yifan.service.UserService;
import com.yifan.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.UUID;

@Controller
public class UserController {
     

    @Autowired
    private UserService userService;
    @Autowired
    private RedisUtil redisUtil;

    @GetMapping("index")
    public String index(){
     
        return "index";
    }

    @GetMapping({
     "/","/login"})
    public String login(){
     
        return "login";
    }

    @GetMapping("getInfoToken")
    @ResponseBody
    public String getinfo(HttpServletRequest request){
     
        String token = request.getHeader("token");
        System.err.println("token ---> "+token);
        long expire = redisUtil.getExpire(token);
        System.err.println("expire ---> "+redisUtil.getExpire(token));
        if(expire > 0L){
     
            return "ok";
        }else {
     
            return "error";
        }
    }
    @PostMapping("toindex")
    @ResponseBody
    public Result index(@RequestParam String name , @RequestParam String password){
     
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getName,name).eq(User::getPassword,password);
        User one = userService.getOne(wrapper);
        if(one != null ){
     
            String token = UUID.randomUUID()+"";
            redisUtil.set(token,one,30000L);
            return new Result(one ,token);
        } else {
     
          return null ;
        }
    }
}

5,这里的 Result是封装的返回结果类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
     
    private T object;
    private String data;
}

6,前端页面 一个简单的登录页面




    
    登录页面


登录

name:

password:

7,登录成功页面




    
    Title


	

登录成功了

8,效果

Token令牌 Redis 案例_第1张图片
end —

快来关注“弋凡”微信公众号吧

快来关注“弋凡”微信公众号把

你可能感兴趣的:(笔记,redis,java,ajax)