sa-token 路由拦截式鉴权

简介: sa-token 路由拦截式鉴权

前言

假设我们有如下需求:

24.png

我们怎么实现呢?给每个接口加上鉴权注解?手写全局拦截器?似乎都不是非常方便。

在这个需求中我们真正需要的是一种基于路由拦截的鉴权模式, 那么在sa-token怎么实现路由拦截鉴权呢?


使用方式

1、注册路由拦截器

springboot2.0 为例, 新建配置类MySaTokenConfig.java

@Configuration
public class MySaTokenConfig implements WebMvcConfigurer {
    // 注册sa-token的登录拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册登录拦截器,并排除登录接口地址 
        registry.addInterceptor(new SaRouteInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/doLogin"); 
    }
}

以上代码,我们注册了一个登录验证拦截器,并且排除了 /user/doLogin 接口用来开放登录

那么我们如何进行权限认证拦截呢,且往下看


2、所有拦截器示例


@Configuration
public class MySaTokenConfig implements WebMvcConfigurer {
    // 注册sa-token的所有拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册一个登录验证拦截器 
        registry.addInterceptor(SaRouteInterceptor.createLoginVal()).addPathPatterns("/**").excludePathPatterns("/user/doLogin"); 
        // 注册一个角色认证拦截器 
        registry.addInterceptor(SaRouteInterceptor.createRoleVal("super-admin")).addPathPatterns("/**"); 
        // 注册一个权限认证拦截器 
        registry.addInterceptor(SaRouteInterceptor.createPermissionVal("user:add", "user:deelete")).addPathPatterns("/UserController/**"); 
        // 注册一个自定义认证拦截器 (可以写任意认证代码)
        registry.addInterceptor(new SaRouteInterceptor((request, response, handler)->{
            System.out.println("---------- 进入自定义认证 --------------- ");
            // 你可以在这里写任意认证代码, 例如: StpUtil.checkLogin(); 
        })).addPathPatterns("/**");
    }
}

(你不必像上面的示例一样注册所有拦截器,只要按需注册即可 )

3、让我们利用自定义拦截器做点快活的事情

你可以根据路由划分模块,不同模块不同鉴权


@Configuration
public class MySaTokenConfig implements WebMvcConfigurer {
    // 注册sa-token的所有拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SaRouteInterceptor((request, response, handler)->{
            // 根据路由划分模块,不同模块不同鉴权 
            SaRouterUtil.match("/user/**", () -> StpUtil.checkPermission("user"));
            SaRouterUtil.match("/admin/**", () -> StpUtil.checkPermission("admin"));
            SaRouterUtil.match("/goods/**", () -> StpUtil.checkPermission("goods"));
            SaRouterUtil.match("/orders/**", () -> StpUtil.checkPermission("orders"));
            SaRouterUtil.match("/notice/**", () -> StpUtil.checkPermission("notice"));
            SaRouterUtil.match("/comment/**", () -> StpUtil.checkPermission("comment"));
        })).addPathPatterns("/**");
    }
}

4、完整的示例

最终的代码,可能会类似于下面的样子:

@Configuration
public class MySaTokenConfig implements WebMvcConfigurer {
    // 注册sa-token的拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 自定义验证拦截器 
        registry.addInterceptor(new SaRouteInterceptor((request, response, handler) -> {
            // 登录验证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录 
            SaRouterUtil.match("/**", "/user/doLogin", () -> StpUtil.checkLogin());
            // 角色认证 -- 拦截以 admin 开头的路由,必须具备[admin]角色或者[super-admin]角色才可以通过认证 
            SaRouterUtil.match("/admin/**", () -> StpUtil.checkRoleOr("admin", "super-admin"));
            // 权限认证 -- 不同模块, 校验不同权限 
            SaRouterUtil.match("/user/**", () -> StpUtil.checkPermission("user"));
            SaRouterUtil.match("/admin/**", () -> StpUtil.checkPermission("admin"));
            SaRouterUtil.match("/goods/**", () -> StpUtil.checkPermission("goods"));
            SaRouterUtil.match("/orders/**", () -> StpUtil.checkPermission("orders"));
            SaRouterUtil.match("/notice/**", () -> StpUtil.checkPermission("notice"));
            SaRouterUtil.match("/comment/**", () -> StpUtil.checkPermission("comment"));
            // 匹配RESTful风格路由 
            SaRouterUtil.match("/article/get/{id}", () -> StpUtil.checkPermission("article"));
        })).addPathPatterns("/**");
    }
}

JAVA 复制 全屏

相关文章
sa-token实现网关调用认证服务统一鉴权
sa-token实现网关调用认证服务统一鉴权
1028 0
|
Java Spring
Spring Boot3整合knife4j(swagger3)
Spring Boot3整合knife4j(swagger3)
4910 1
|
设计模式 Java 机器人
SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter
SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter
|
5月前
|
人工智能 安全 Linux
OpenClaw Skills深度解析:阿里云/本地部署+大模型api接入,构建可扩展AI Agent能力平台
OpenClaw(曾用名Clawdbot、Moltbot)是一款MIT开源协议的自托管AI Agent网关,可将Discord、Telegram、iMessage等通讯工具与主流大模型对接,实现轻量化AI助理部署。其核心竞争力在于**Skills技能系统**,截至2026年2月,ClawHub已收录超13700个社区技能,成为AI Agent生态的核心扩展载体。
931 0
|
移动开发 小程序 前端开发
小程序接入微信支付V3接口开发教程
最近做了一个小程序对接微信支付的需求,查看微信支付文档,还是感觉有点凌乱,所以做一个统一整理,供大家参考。
1825 0
小程序接入微信支付V3接口开发教程
|
NoSQL 前端开发 测试技术
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。本文结合网关和SaToken快速搭建可用的Session管理服务。
1810 8
|
缓存 NoSQL Java
一个轻量级 Java 权限认证框架——Sa-Token
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
|
存储 NoSQL Java
Spring Boot项目中使用Redis实现接口幂等性的方案
通过上述方法,可以有效地在Spring Boot项目中利用Redis实现接口幂等性,既保证了接口操作的安全性,又提高了系统的可靠性。
863 1
|
Windows
蓝易云 - 使用openssl进行证书格式转换
请注意,上述命令中的"certificate.pem"、"certificate.der"、"certificate.crt"、"certificate.pfx"和"privateKey.key"需要替换为你的实际文件名。
678 4
|
NoSQL 前端开发 Java
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)