前言
如果你的项目没有使用旧写法,可以忽略本篇文章 移步官网,本文只针对旧版本到新版本的迁移提供示例。
1、旧版本
Sa-Token 在 1.30.0 及以下版本中使用两个拦截器:
SaAnnotationInterceptor
:负责提供注解鉴权能力。SaRouteInterceptor
:负责提供路由拦截鉴权能力。
这次新增的拦截器
SaInterceptor
名字为综合拦截器,见名思意就是综合上述两个拦截器的能力,既提供注解鉴权能力,也提供路由鉴权能力,目的是为了替代上述两个拦截器(v1.31.0已将上述两个类打上
@Deprecated
标记)。
2、新版本用法
在用法上 SaInterceptor 可以简单总结为两点:
- 相对于
SaAnnotationInterceptor
,只做增强,不做改变,可以直接无损替换。 - 相对于
SaRouteInterceptor
,除掉其默认的StpUtil.checkLogin()
登录校验能力,默认不执行任何动作。
下面将用几个示例详细展示 SaInterceptor 带来的变化点。
3、示例
示例1,注解鉴权
原写法:
@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){// 注册 Sa-Token 注解拦截器,打开注解鉴权功能
registry.addInterceptor(newSaAnnotationInterceptor()).addPathPatterns("/**");}
新版本写法:
@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){// 注册 Sa-Token 拦截器,打开注解鉴权功能
registry.addInterceptor(newSaInterceptor()).addPathPatterns("/**");}
总结:只替换一下拦截器的名称就可以了。
示例2,路由鉴权,默认登录校验
原写法:
@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){// 注册 Sa-Token 的路由拦截器
registry.addInterceptor(newSaRouteInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/doLogin");}
新版本写法:
@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){// 注册 Sa-Token 的路由拦截器
registry.addInterceptor(newSaInterceptor(handle ->StpUtil.checkLogin())).addPathPatterns("/**").excludePathPatterns("/user/doLogin");}
总结:由于默认的登录校验功能不提供了,所有需要我们手动补一下。
示例3,路由鉴权,自定义认证规则
原写法:
@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){// 注册 Sa-Token 拦截器,定义详细认证规则
registry.addInterceptor(newSaRouteInterceptor((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("/**");}
新版本写法:
@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){// 注册 Sa-Token 拦截器,定义详细认证规则
registry.addInterceptor(newSaInterceptor(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
代表忽略掉指定方法的鉴权校验,快来官网文档查看一下吧。:)
版权归原作者 shengzhang_ 所有, 如有侵权,请联系我们删除。