关注 “弋凡”(YiFan)微信公众号吧 记录简单笔记 做你的最爱
SpringBoot 整合 Redis 看之前文章
Token 是什么?
token 专业术语为 令牌,更通俗来说就相当于暗号,一般用于身份验证的时候,用token更加的安全,
Token 怎么用?
一般通过ajax发送请求,服务器接收请求去验证用户名和密码,然后返回给客户端一串字符串(token),客户端接收这个token把它存在Cookie 或者Local Storage中
客户端每次请求资源的时候需要携带这个token,服务器去接收这个token然后去验证,成功则返回请求需要的数据
Token 存在 Redis
中
1,导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
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,前端页面 一个简单的登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h4>登录</h4>
<p> <span>name:</span> <input type="text" id="name"></p>
<p> <span>password:</span> <input type="text" id="password"></p>
<p><input type="button" value="login" class="login"></p>
<p><input type="button" value="token login" class="tokenlogin"></p>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script>
$(function () {
$(".tokenlogin").click(function () {
$.ajax({
type: "get",
url: "getInfoToken",
headers:{"token":localStorage.token},
success: function (res) {
console.log("-->res "+res);
if(res == "ok"){
// 跳转 controller 中的 index 请求
window.location.href = "index";
}
}
})
});
$(".login").click(function () {
$.ajax({
type: "post",
url: "toindex",
data: {name:$("#name").val(), password:$("#password").val()},
dataType: "json",
success: function (res) {
// 本地存储这个token
localStorage.token=res.data;
if(res !=null){
window.location.href = "index";
}
}
})
})
})
</script>
</html>
7,登录成功页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>登录成功了</h3>
</body>
</html>
8,效果
end —