Sa-Token v.1.31.0 新增拦截器 SaInterceptor 功能说明,以及旧代码迁移示例

Posted shengzhang_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sa-Token v.1.31.0 新增拦截器 SaInterceptor 功能说明,以及旧代码迁移示例相关的知识,希望对你有一定的参考价值。

前言

如果你的项目没有使用旧写法,可以忽略本篇文章 移步官网,本文只针对旧版本到新版本的迁移提供示例。

1、旧版本

Sa-Token 在 1.30.0 及以下版本中使用两个拦截器:

  • SaAnnotationInterceptor:负责提供注解鉴权能力。
  • SaRouteInterceptor:负责提供路由拦截鉴权能力。

这次新增的拦截器 SaInterceptor 名字为综合拦截器,见名思意就是综合上述两个拦截器的能力,既提供注解鉴权能力,也提供路由鉴权能力,目的是为了替代上述两个拦截器(v1.31.0已将上述两个类打上 @Deprecated 标记)。

2、新版本用法

在用法上 SaInterceptor 可以简单总结为两点:

  1. 相对于 SaAnnotationInterceptor,只做增强,不做改变,可以直接无损替换。
  2. 相对于 SaRouteInterceptor,除掉其默认的 StpUtil.checkLogin() 登录校验能力,默认不执行任何动作。

下面将用几个示例详细展示 SaInterceptor 带来的变化点。

3、示例

示例1,注解鉴权

原写法:

@Override
public void addInterceptors(InterceptorRegistry registry) 
	// 注册 Sa-Token 注解拦截器,打开注解鉴权功能 
	registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");

新版本写法:

@Override
public void addInterceptors(InterceptorRegistry registry) 
	// 注册 Sa-Token 拦截器,打开注解鉴权功能 
	registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");

总结:只替换一下拦截器的名称就可以了。

示例2,路由鉴权,默认登录校验

原写法:

@Override
public void addInterceptors(InterceptorRegistry registry) 
	// 注册 Sa-Token 的路由拦截器
	registry.addInterceptor(new SaRouteInterceptor())
		.addPathPatterns("/**")
		.excludePathPatterns("/user/doLogin"); 

新版本写法:

@Override
public void addInterceptors(InterceptorRegistry registry) 
	// 注册 Sa-Token 的路由拦截器
	registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
			.addPathPatterns("/**")
			.excludePathPatterns("/user/doLogin"); 

总结:由于默认的登录校验功能不提供了,所有需要我们手动补一下。

示例3,路由鉴权,自定义认证规则

原写法:

@Override
public void addInterceptors(InterceptorRegistry registry) 
	// 注册 Sa-Token 拦截器,定义详细认证规则 
	registry.addInterceptor(new SaRouteInterceptor((req, res, handler) -> 
		// 根据路由划分模块,不同模块不同鉴权 
		SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
		SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
		SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
		SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
		SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
		SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment"));
		// ...
	)).addPathPatterns("/**");

新版本写法:

@Override
public void addInterceptors(InterceptorRegistry registry) 
	// 注册 Sa-Token 拦截器,定义详细认证规则
	registry.addInterceptor(new SaInterceptor(handler -> 
		// 根据路由划分模块,不同模块不同鉴权 
		SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
		SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
		SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
		SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
		SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
		SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment"));
		// ...
	)).addPathPatterns("/**");

总结:做一下名称 + 参数替换 就可以了。


新版本拦截器大体上就带来这三种变化,另外还新增了一个注解 @SaIgnore 代表忽略掉指定方法的鉴权校验,快来官网文档查看一下吧。:)

Sa-Token v1.20.0 发布,新增临时Token认证

框架介绍

Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、分布式Session会话、单点登录、OAuth2.0 等一系列权限相关问题。

框架针对踢人下线、自动续签、前后台分离、分布式会话……等常见业务进行N多适配,通过sa-token,你可以以一种极简的方式实现系统的权限认证部分

Sa-Token v1.20.0 版本更新包括以下内容:

  • 新增:新增Solon适配插件,感谢大佬 @刘西东 提供的pr [重要]
  • 新增:新增SaRouter.stop()函数,用于一次性跳出匹配链功能 [重要]
  • 新增:新增单元测试 [重要]
  • 新增:新增临时令牌验证模块 [重要]
  • 新增:新增sa-token-temp-jwt模块整合jwt临时令牌鉴权 [重要]
  • 新增:会话 SaSession.get() 增加缓存API,简化代码
  • 新增:新增框架调查问卷
  • 修复:修复同时引入 Spring Cloud BusSa-Token 冲突的问题 [重要]
  • 修复:修复SaServletFilter异常函数中无法自定义Content-Type的问题
  • 文档:新增微服务依赖引入说明
  • 文档:新增认证流程图
  • 不兼容更新重构:

    • 方法:StpUtil.setLoginId(id) -> StpUtil.login(id)
    • 方法:StpUtil.getLoginKey() -> StpUtil.getLoginType() (注意其它所有地方的LoginKey均已更改为loginType)
    • 工具类:SaRouterUtil -> SaRouter
    • 配置类:allowConcurrentLogin -> isConcurrent
    • 配置类:isV -> isPrint
    • 为保证平滑更新,旧API仍旧保留,但已增加@Deprecated注解,请尽快更新至新API

在线资料

  • Gitee地址:https://gitee.com/dromara/sa-token
  • GitHub地址:https://github.com/dromara/sa-token
  • 在线开发文档:http://sa-token.dev33.cn/

以上是关于Sa-Token v.1.31.0 新增拦截器 SaInterceptor 功能说明,以及旧代码迁移示例的主要内容,如果未能解决你的问题,请参考以下文章

Sa-Token v1.20.0 发布,新增临时Token认证

SpringBoot 使用 Sa-Token 完成路由拦截鉴权

Sa-Token v1.20.0 发布,新增临时Token认证

26. spring boot 拦截器不生效的原因

Sa-Token简单使用

Sa-token简单介绍和基本使用