SpringBoot0x04
传统方式通过存储session来实现权限访问, 但对于多端跨域存在一定问题
JWT验证: 对于前后端分离, 跨域问题应用JWT验证
易实现跨域, 不用在服务器存储(1令牌可登录多服务器)
JWT_token : userid + 密钥(加密) => 发给用户
增加安全性: JWT_token包括access_token(短期5min)和refresh_token(长时间14/30天)
对于get, post操作, 尽可能的采用时间更短的access_token执行, refresh_token只执行post操作, 即当access_token失效更新access_token
执行逻辑 :
url公开部分 => login(获取token)
用户发送请求(带上token) => (验证token)查找用户 => 提取到上下文, 访问授权controller
写API(3地方): 1controller(用于调用service), 2service中写一个接口, 3service中impl中写接口的具体实现
Service写接口, 再写实现, 然后在controller中写一个类
实现service, 添加注解service
alt+insert可以添加实现方法
凡是需要用到的东西, 都需要注入进来
登录请求: 应是post请求, 而不是get请求(会将用户名和密码放到url中明文传输)
定义之后记得将路径放行
此时调试时, 浏览器为get请求, 而写的是post请求(可以用postman或者在前端调试)
网站jwt.io在线解密:https://jwt.io/
获取信息get, 修改/删除/添加为post
ajax中调用mutations中的函数需要.commit("字符串")使用
关于Authorization: "Bearer " + context.state.token, 其中字符串中末尾存在空格
登录的持久化
token存储在内存, 刷新后会重置, 持久化存储在本地localstory中
当访问后端API需授权时, 则加上表头, 除公开url都需表头
实现注册页面, 复制登录页面再修改即可
java中加引号写字典, 才表示字符串, 但js关键字中字符串可以去掉引号, 且若关键字对应函数可以简写
点击查看代码
$.ajax({
url:"http://127.0.0.1:3000/user/account/register/",
type: "post",
headers: {
Authorization: "Bearer " + store.state.user.token,
},
"success" function(resp) {
console.log(resp);
},
//可简写为(注意succee部分)
$.ajax({
url:"http://127.0.0.1:3000/user/account/register/",
type: "post",
headers: {
Authorization: "Bearer " + store.state.user.token,
},
success(resp) {
console.log(resp);
},
mutations中函数需要commit, 用actions中函数要用dispatch
数据修改为异步, 拉取云端信息时用actions, 同步操作为mutations

浙公网安备 33010602011771号