sa-token/sa-token-doc/doc/plugin/jwt-extend.md
2021-10-30 00:37:04 +08:00

3.9 KiB
Raw Blame History

和 jwt 集成

本插件的作用是让 Sa-Token 和 jwt 做一个整合。


1、引入依赖

首先在项目已经引入 Sa-Token 的基础上,继续添加:

<!-- Sa-Token 整合 jwt -->
<dependency>
	<groupId>cn.dev33</groupId>
	<artifactId>sa-token-jwt</artifactId>
	<version>${sa.top.version}</version>
</dependency>

2、配置秘钥

application.yml 配置文件中配置 jwt 生成秘钥:

sa-token:
	# jwt秘钥 
	jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk

注:为了安全起见请不要直接复制官网示例这个字符串(随便按几个字符就好了)

3、注入jwt实现

根据不同的整合规则,插件提供了三种不同的模式,你需要 选择其中一种 注入到你的项目中

Style 模式Token 风格替换

@Configuration
public class SaTokenConfigure {
    // Sa-Token 整合 jwt (Style模式)
	@Bean
    public StpLogic getStpLogicJwt() {
    	return new StpLogicJwtForStyle();
    }
}

Mix 模式:混入部分逻辑

@Configuration
public class SaTokenConfigure {
    // Sa-Token 整合 jwt (Style模式)
	@Bean
    public StpLogic getStpLogicJwt() {
    	return new StpLogicJwtForMix();
    }
}

Stateless 模式:服务器完全无状态

@Configuration
public class SaTokenConfigure {
    // Sa-Token 整合 jwt (Style模式)
	@Bean
    public StpLogic getStpLogicJwt() {
    	return new StpLogicJwtForStateless();
    }
}

4、开始使用

然后我们就可以像之前一样使用 Sa-Token 了

/**
 * 登录测试 
 */
@RestController
@RequestMapping("/acc/")
public class LoginController {

    // 测试登录
    @RequestMapping("login")
    public SaResult login() {
		StpUtil.login(10001);
        return SaResult.ok("登录成功");
    }

    // 查询登录状态
    @RequestMapping("isLogin")
    public SaResult isLogin() {
        return SaResult.ok("是否登录:" + StpUtil.isLogin());
    }

    // 测试注销
    @RequestMapping("logout")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }

}

访问上述接口观察Token生成的样式

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbklkIjoiMTAwMDEiLCJybiI6IjZYYzgySzBHVWV3Uk5NTTl1dFdjbnpFZFZHTVNYd3JOIn0.F_7fbHsFsDZmckHlGDaBuwDotZwAjZ0HB14DRujQfOQ

5、不同模式策略对比

注入不同模式会让框架具有不同的行为策略,以下是三种模式的差异点(为方便叙述,以下比较以同时引入 jwt 与 Redis 作为前提):

功能点 Style 模式 Mix 模式 Stateless 模式
Token风格 jwt风格 jwt风格 jwt风格
登录数据存储 Redis中 Token中 Token中
Session存储 Redis中 Redis中 无Session
注销下线 前后端双清数据 前后端双清数据 前端清除数据
踢人下线API 支持 不支持 不支持
登录认证 支持 支持 支持
角色认证 支持 支持 支持
权限认证 支持 支持 支持
timeout 有效期 支持 支持 支持
activity-timeout 有效期 支持 支持 不支持
id反查Token 支持 支持 不支持
会话管理 支持 部分支持 不支持
注解鉴权 支持 支持 支持
账号封禁 支持 支持 不支持
身份切换 支持 支持 支持
二级认证 支持 支持 支持
模式总结 Token风格替换 jwt 与 Redis 逻辑混合 完全舍弃Redis只用jwt