一、添加依赖
二、设置配置文件
三、创建测试Controller:登录接口
四、创建测试Controller:普通访问接口
五、检验当前会话是否已经登录
六、路由拦截鉴权
七、自定义全局异常拦截
添加依赖
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.35.0.RC</version>
</dependency>
设置配置文件
server:
## 端口
port: 8081
## Sa-Token配置
sa-token:
## token 名称 (同时也是cookie名称)
token-name: satoken
## token 有效期,单位s 默认30天, -1代表永不过期
timeout: 2592000
## token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1
## 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
## 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
## token风格
token-style: uuid
## 是否输出操作日志
is-log: false
创建测试Controller:登录接口
@RestController
@RequestMapping("/user/")
public class UserController {
// 测试登录,浏览器访问:http://localhost:8080/user/doLogin?username=abc&password=123456
@RequestMapping("doLogin")
public String doLogin(String username, String password) {
// 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对
if("abc".equals(username) && "123456".equals(password)) {
StpUtil.login(10001);
return "登录成功";
}
return "登录失败";
}
}
创建测试Controller:普通访问接口
@RestController
@RequestMapping("/interview")
public class InterviewController {
@RequestMapping("test1")
public String test1(){
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常,后面加了路由拦截这个方法就用不上了,可以通过路由拦截
StpUtil.checkLogin();
return "访问接口test1";
}
}
检验当前会话是否已经登录,这个方法可以在接口里单独使用
// 检验当前会话是否已经登录, 如果未登录,则抛出异常:`NotLoginException`
StpUtil.checkLogin();
路由拦截鉴权
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
// 注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册 Sa-Token 拦截器,校验规则为 StpUtil.checkLogin() 登录校验。
registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
.addPathPatterns("/**")
.excludePathPatterns("/user/doLogin");
}
}
自定义全局异常拦截
@RestControllerAdvice
public class GlobalExceptionHandler {
// 全局异常拦截
@ExceptionHandler
public SaResult handlerException(Exception e) {
e.printStackTrace();
return SaResult.error(e.getMessage());
}
}
以上流程全部走完,差不多就实现了登录的基本功能