1. 登录后获取用户信息
非常好实现. 只要新建一个controller, 并调用SS提供的Authentication对象即可
package com.sunsplanter.controller;
@RestController
public class UserController {
@GetMapping(value = "api/login/info")
public R loginInfo(Authentication authentication) {
TUser tUser = (TUser)authentication.getPrincipal();
return R.OK(tUser);
}
}
未登录状态下可以直接访问 api/login/info吗?
不可以. 因为在安全配置类已经写明了, 仅登陆界面允许任何人访问, 其他所有界面都需要认证
<由于未写JWT, 默认使用Session 保存会话,> ???好像不对
因此只要我们先通过登录接口登录, 然后再直接访问获取用户信息接口即可
2. 使用JWT打通登录后各个页面的认证
前后端分离的项目一般会使用token(jwt)实现登录状态的保持;(java web : session)
token其实就是一个随机字符串(字符串要求是唯一的,不同人的token都不能相同),当用户在登录页面输入账号和密码后,前端将账号密码发送给后端,后端检验完账号和密码后,会生成一个随机不重复的字符串即(token),并将其响应给前端,前端拿到token后,需要在客户端进行持久化存储(一般会写在localStorage或者sessionStorage中),那么下次在向后端数据接口发送请求的时候,一般需要将token一并发送给后端数据接口,后端数据接口会对token进行校验,如果合法则正常响应请求,如果不合法,则提示未登录。
2.1 sessionStorage与localStorage
它们是javascript对象,浏览器支持这两个对象,可以直接使用. 属于前端范畴
localStorage和sessionStorage都是用来在浏览器客户端存储临时信息的对象;
sessionStorage、localStorage区别?
sessionStorage只在一个浏览器页面有效,比如你打开一个新的tab浏览器页会失效,你关闭浏览器后,再打开浏览器也会失效;
localStorage在整个浏览器中都有效,重启浏览器也有效;除非你手动删除了localStorage,才会失效;
2.2 修改登录成功拦截器
根据流程图, 在查询到对象并返回给SS后, SS会调用成功拦截器, 就在这个拦截器中, 根据查询到的对象生成JWT并同时存进Redis和返回前端.