首页IT科技拦截器 handler参数(Sa-Token v.1.31.0 新增拦截器 SaInterceptor 功能说明,以及旧代码迁移示例)

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

时间2025-09-17 11:02:47分类IT科技浏览6040
导读:前言 如果你的项目没有使用旧写法,可以忽略本篇文章 移步官网,本文只针对旧版本到新版本的迁移提供示例。...

前言

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

1                、旧版本

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

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

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

2                         、新版本用法

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

相对于 SaAnnotationInterceptor         ,只做增强                        ,不做改变                ,可以直接无损替换                         。 相对于 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 代表忽略掉指定方法的鉴权校验                ,快来官网文档查看一下吧                         。:)

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
集成电路模具(ChatGPT 的 10 种集成模式:从开源 AI 体验平台 ClickPrompt 中受到的启发) element ui组件(ElementUI快速上手(jar包本地下载))