在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行

在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行

在这里插入图片描述

很喜欢的一段话:别想太多,好好生活,也许日子过着过着就会有答案,努力走着走着就会有温柔的着落。
春在路上,花在枝上,所有的美好都在路上,努力过好自己的生活,偶尔慌乱,偶尔平稳,都各有滋味,怀着诚恳,好好努力好好生活,闲事勿虑,别让鸡零狗碎的破事,耗尽你对美好生活的所有向往。

1. 引入依赖

首先,在pom.xml文件中引入Sa-Token相关的依赖。Sa-Token是一个轻量级的Java权限认证框架,可以帮助我们轻松实现用户登录状态的管理和权限认证。

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.27.0</version>
</dependency>

2. 创建配置类 SecurityProperties

定义一个配置类SecurityProperties,用于读取和存储从配置文件中加载的排除路径信息。这里使用了Spring Boot的@ConfigurationProperties注解来绑定配置文件中的属性。

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import
### 使用 sa-token 进行 Spring Boot 3 身份验证授权 为了在 Spring Boot 3 中集成并使用 sa-token 实现身份验证授权功能,可以遵循以下方法: #### 添加依赖项 首先,在 `pom.xml` 文件中加入 sa-token 的 Maven 依赖以及必要的 Spring Boot 组件。 ```xml <dependencies> <!-- Sa-Token 权限认证 --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.28.0</version> </dependency> <!-- 如果项目基于SpringBoot,则引入web模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 开发工具包 (热部署) 可选 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies> ``` 此部分配置确保了应用程序能够访问到最新的 sa-token 库以及其他必需的支持库[^1]。 #### 配置文件设置 接着修改项目的 application.yml 或者 application.properties 文件来适应 sa-token 所需的一些基本参数。例如: ```yaml server: port: 8081 sa-token: token-name: satoken # 自定义 Token 名称,默认为 `satoken` timeout: 2592000 # token有效期 默认30天(单位:s) is-concurrent: true # 是否开启允许多处登录同一账号 max-concurrent: -1 # 同一账户并发数限制 (-1表示不限制) activity-timeout: 1800 # 单位时间内无操作则自动下线时间,默认半小时 ``` 这些属性允许开发者自定义令牌名称、过期时间多会话控制等方面的行为。 #### 创建控制器类 创建一个新的 RESTful API 控制器用于处理用户的注册、登录请求,并返回相应的 JWT 令牌给前端客户端。 ```java @RestController @RequestMapping("/auth") public class AuthController { @Autowired private StpUtil stp; @PostMapping("/login") public Result login(@RequestParam String account,@RequestParam String password){ // 此处应替换为你自己的业务逻辑校验用户名密码是否正确 boolean isValidUser = "admin".equals(account)&&"123456".equals(password); if(!isValidUser){ return Result.fail("账号或密码错误"); } // 登录成功后签发token stp.login(account); Map<String,Object> data=new HashMap<>(); data.put("token",stp.getTokenValue()); return Result.success(data,"登陆成功!"); } } ``` 这段代码展示了如何通过 POST 请求 `/auth/login` 接口完成用户的身份验证过程,并向合法用户提供一个有效的 JSON Web Tokens(JWT)。 #### 定义权限拦截规则 最后一步是在全局范围内定义哪些 URL 地址需要经过身份验证才能被访问。这可以通过实现 `SaHttpInterceptorConfig` 接口来自定义路径匹配策略。 ```java @Configuration public class SaTokenConfigure implements SaHttpInterceptorConfig { @Override public void apply(SaRouteRegister route) throws Exception { // 设置有参函数式接口,快速编写鉴权规则 route.anon("/auth/**"); // 访问 /auth/** 不做任何拦截放行 route.test(r -> !StpUtil.isLogin(), "/**");// 已经登录的情况下不允许再次访问其他页面 // 对于剩余所有资源都需要先登录才可以访问 route.match("/**", r->{ throw new NotPermissionException(); }); } } ``` 上述代码片段说明了怎样利用路由映射机制指定特定端点的安全约束条件,从而保护敏感数据免受未授权访问的影响。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小辉同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值