在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 lombok.Data;@Data
@Component
@ConfigurationProperties(prefix = "security")
public class SecurityProperties {/*** 排除路径*/private String[] excludes;
}
  • @Data:这是Lombok的注解,自动生成getter和setter方法。
  • @Component:将该类注册为Spring的组件。
  • @ConfigurationProperties:指定前缀security,从配置文件中读取以该前缀开头的属性,并将这些属性映射到该类的字段上。

3. 编写配置文件

在配置文件application.yml或者application.properties中,配置需要排除的路径。例如:

application.yml:

security:excludes:- "/public/**"- "/login"- "/register"

application.properties:

security.excludes=/public/**,/login,/register
  • /public/**:排除所有以/public/开头的路径。
  • /login:排除/login路径。
  • /register:排除/register路径。

4. 配置拦截器

创建一个配置类WebConfig,实现WebMvcConfigurer接口,在其中配置Sa-Token的拦截器,并将排除的路径应用到拦截器中。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate SecurityProperties securityProperties;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new SaInterceptor(handler -> {// 获取所有的URL并进行检查SaRouter.match("/**").check(() -> {// 检查是否登录StpUtil.checkLogin();});})).addPathPatterns("/**")  // 拦截所有路径.excludePathPatterns(securityProperties.getExcludes());  // 排除指定路径}
}
  • @Configuration:标识这是一个配置类。
  • addInterceptors:重写该方法,向Spring的拦截器注册中心添加自定义的拦截器。
  • SaInterceptor:Sa-Token提供的拦截器,主要用于权限验证。
  • SaRouter.match("/**"):匹配所有路径。
  • StpUtil.checkLogin():Sa-Token提供的登录状态检查方法,用于验证用户是否已登录。
  • excludePathPatterns:从拦截中排除指定的路径,这些路径从SecurityProperties中获取。

5. 验证拦截效果

启动Spring Boot应用程序,验证配置是否生效。以下是一些测试步骤:

  1. 访问排除路径

    • 尝试访问配置文件中排除的路径,如/public/**/login/register
    • 这些路径应不会触发登录检查,可以直接访问。
  2. 访问其他路径

    • 尝试访问其他未排除的路径,如/admin/user/profile等。
    • 这些路径应触发Sa-Token的登录验证逻辑,如果用户未登录,将会被拦截,并返回相应的未登录提示。

代码解析

  • SecurityProperties:通过@ConfigurationProperties注解,Spring Boot会自动将前缀为security的配置属性绑定到该类的excludes字段上,从而实现排除路径的配置。
  • 配置文件:在配置文件中定义需要排除的路径,以便动态加载到SecurityProperties中。
  • WebConfig:实现WebMvcConfigurer接口,通过addInterceptors方法添加Sa-Token的拦截器,并使用excludePathPatterns方法将配置文件中定义的排除路径应用到拦截器中。

详细解释

依赖配置

Sa-Token是一个轻量级的权限认证框架,可以帮助我们轻松实现用户登录状态的管理和权限认证。通过引入sa-token-spring-boot-starter依赖,我们可以很方便地将其集成到Spring Boot项目中。

配置类 SecurityProperties

SecurityProperties类的作用是将配置文件中定义的排除路径读取并存储到excludes数组中。通过使用@ConfigurationProperties注解,我们可以将前缀为security的属性绑定到该类的excludes字段上。这样做的好处是,排除路径可以通过配置文件进行动态配置,方便管理和维护。

配置文件

在配置文件中,我们定义了需要排除的路径。这些路径将不会被拦截器拦截,可以直接访问。配置文件支持YAML格式和Properties格式,根据项目需要选择合适的格式进行配置。

拦截器配置

WebConfig类中,我们实现了WebMvcConfigurer接口,并重写了addInterceptors方法。在该方法中,我们创建了一个Sa-Token的拦截器,并通过SaRouter.match("/**")匹配所有路径。对于匹配到的路径,我们使用StpUtil.checkLogin()方法进行登录状态检查。如果用户未登录,将会被拦截,并返回相应的未登录提示。

通过excludePathPatterns方法,我们将从SecurityProperties中获取的排除路径应用到拦截器中。这样一来,配置文件中定义的排除路径将不会被拦截器拦截,可以直接访问。

总结

通过本文的介绍,我们了解了如何在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行。我们首先引入了Sa-Token的依赖,然后定义了一个配置类SecurityProperties,用于读取和存储排除路径信息。接着,在配置文件中定义了需要排除的路径,并在WebConfig类中配置了Sa-Token的拦截器,将排除路径应用到拦截器中。最后,通过测试和验证,确保配置生效,实现了对特定路径的放行和其他路径的权限验证。

这种方式可以帮助开发者更灵活地管理Web应用中的访问控制,提升系统的安全性和可维护性。如果你有更多的自定义需求,可以根据Sa-Token的文档进行进一步配置和扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【测试专题】系统测试报告(原件Word)

软件测试报告在软件开发过程中起着至关重要的作用&#xff0c;主要有以下几个主要原因&#xff1a; 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…

IO流(二)

IO流&#xff08;二&#xff09; 目录 IO流 —— 字符流IO流 —— 缓冲流IO流 —— 转换流IO流 —— 打印流IO流 —— 数据流IO流 —— 序列化流 1.IO流 —— 字符流 文件字符输入流 —— 读字符数据进来 字节流&#xff1a;适合复制文件等&#xff0c;不适合读写文本文件字…

nginx rewrite地址重写

目录 常用的nginx正则表达式 location和rewrite的区别 一、location 1.location常用匹配类型 2.location匹配机制 3.实际工作中三大匹配规则 1.网站首页匹配 2.网站静态页面&#xff0c;通过前缀匹配或通用匹配在nginx服务器本地处理 3.网站动态页面&#xff0c;通过匹…

PostgreSQL源码分析——initdb

数据库初始化 在安装完数据库后&#xff0c;需要进行初始化数据库操作&#xff0c;对应PostgreSQL数据库中就是需要进行initdb后&#xff0c;才能对数据库进行启动。initdb的过程&#xff0c;其实就是创建数据库实例的过程&#xff0c;生成模板数据库和相应的目录、文件信息&a…

uniapp小程序限制微信群访问(图文教程)

我有一个微信小程序 “程序员实用资源” 我现在只想让我的微信群可以访问这个小程序的所有功能 所以我必须对我小程序的来源进行限制&#xff0c;让部分功能在正常访问的时候提示没有加群&#xff0c;不可访问&#xff0c;只有从群内点击进入小程序的时候才可以访问这部分功能…

目标检测顶会新成果!20个突破性方法,更高性能,更强理解与分析能力!

【目标检测】在近年来的深度学习领域中备受关注&#xff0c;它通过识别和定位图像中的目标对象&#xff0c;提升了模型在图像理解和分析方面的能力。目标检测技术在自动驾驶、安防监控和医疗影像分析等任务中取得了显著成果。其独特的方法和卓越的表现使其成为研究热点之一。 为…

ESP32蓝牙串口通讯

文章目录 一、前言二、代码三、运行 一、前言 ESP32支持经典蓝牙和低功耗蓝牙&#xff08;BLE&#xff09;,经典蓝牙可在计算机上模拟出一个串口&#xff0c;使得ESP32可以以串口的方式和计算机通信。 二、代码 #include "BluetoothSerial.h"String device_name …

2025计算机毕业设计选题题目推荐-毕设题目汇总大全

选题在于精&#xff0c;以下是推荐的容易答辩的选题&#xff1a; SpringBoot Vue选题: 基于SpringBoot Vue家政服务系统 基于SpringBoot Vue非物质文化遗产数字化传承 基于SpringBoot Vue兽医站管理系统 基于SpringBoot Vue毕业设计选题管理系统 基于SpringBoot Vue灾害应急救援…

软考中级证在手里,感觉白躺家里了?

软考中级&#xff0c;最适合考的专业是《系统集成项目管理工程师》&#xff0c;特别适合零基础的人&#xff01; 2022年中级职称的报名条件和要求非常宽松&#xff0c;即使没有学历、零基础和相关工作经验也可以考试&#xff01;&#xff01;&#xff01; 一、职称的含金量 …

docker 中 File Sharing 和Volumes 的区别

在 Docker 中&#xff0c;File Sharing 和 Volumes 都涉及到将文件和目录从主机系统映射到容器中&#xff0c;但它们的用途和实现方式有一些重要的区别&#xff1a; 一、简介 File Sharing 是 Docker Desktop 在 Windows 和 macOS 上的一项功能&#xff0c;允许你将主机文件系…

中国最厉害的改名大师颜廷利:食物的真正人生意义是识悟

在探索人生意义的深邃征途中&#xff0c;我们本应以“识悟”为航标&#xff0c;不断扬帆远航&#xff0c;以实现自我的升华。然而&#xff0c;当回望人世繁华&#xff0c;古往今来&#xff0c;无论男女老少&#xff0c;似乎都在“食物”的陪伴下&#xff0c;徘徊往复&#xff0…

计算机网络复习

2024年whut 概述 1.计算机网络的目标&#xff1a;信息传输和资源共享 2.网络协议的要素&#xff08;必考&#xff09;&#xff1a; 语法&#xff1a;数据信息和控制信息的结构或格式 语义&#xff1a;要发出何种控制信息&#xff0c;完成何种动作&#xff0c;做出何种响应 同…

safari浏览器无法连接到服务器

问题&#xff1a;MacBook pro&#xff0c;网络连接正常&#xff0c;可以使用各种软件上网&#xff0c;唯独safari浏览器打不开网页&#xff0c;报错说Safari无法连接到服务器&#xff1b; 原因&#xff1a;使用了VPN&#xff0c;VPN自动更改了网络设置&#xff0c;导致Safari浏…

监控局域网电脑屏幕的办法,最简单的三种方法,好用!

在现代企业管理和家庭教育环境中&#xff0c;对局域网内电脑屏幕进行有效监控成为了保障信息安全、提升工作效率和监督行为规范的重要手段。 监控局域网电脑屏幕不仅可以帮助管理者了解员工的工作状态&#xff0c;确保资源的合理使用&#xff0c;还能在一定程度上预防潜在的网…

银行卡归属地查询-银行卡归属地接口-银行卡归属地API

接口简介&#xff1a;通过银行卡号查询国内外银行名称、银行卡卡种、卡品牌以及银行卡发卡省份和城市&#xff0c;支持借记卡和部分贷记卡的发卡省市查询。 若银行卡是农村信用社&#xff0c;归属地无法区分到城市&#xff0c;只能到省份 接口地址&#xff1a;https://www.wapi…

CentOS 7 安装MySQL以及常见问题解决

访问网站&#xff1a;http://repo.mysql.com 找到适配CentOS 7版本的MySQL 的YUM仓库包rpm文件&#xff0c;如下图 下载后&#xff0c;找到安装包的位置 空白处右键&#xff0c;选择在终端打开 查看当前目录下文件 # 安装MySQL 5.7的YUM仓库包rpm -ivh mysql57-community-rele…

中科数安 | 加密管理系统

中科数安提供的加密管理系统是一套全面而高效的数据安全解决方案&#xff0c;旨在保护企业核心文件资料的安全。该系统结合了多种先进的技术手段和管理策略&#xff0c;确保企业数据在存储、传输和使用过程中都得到严格的保护。 www.weaem.com 以下是中科数安加密管理系统的主要…

固定式土壤墒情监测仪—土壤状况进行长期跟踪和分析

TH-TS600 固定式土壤墒情监测仪是一种专门用于长期、连续、自动监测土壤墒情的设备。能够实时监测土壤的水分、温度、湿度等关键参数&#xff0c;确保农民和管理者能即时获取土壤状况信息&#xff0c;便于及时做出农业决策。由于是自动监测&#xff0c;数据采集的准确性和可靠性…

[答疑]订单、预约单的流水号是冗余属性吗

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 陈磊 2024-6-12 20:40 老师好&#xff01;我学习了软件方法的类图内容&#xff0c;也已经认真做题了&#xff0c;现有一个问题想请老师解惑。 像订单、预约单这样的单据生成的时候&a…

铁砧帝国延迟高?铁砧帝国延迟严重这样解决

铁砧帝国是一款少见的多人在线游戏&#xff0c;游戏能支持上千名玩家建立帝国并互相作战。而且这款游戏在细节方面也做足准备&#xff0c;设计了攻城梯和攻城锤等设备&#xff0c;以攻破坚固的城墙和要塞&#xff0c;不过具体获取方法就需要玩家自己摸索。因为最近开放了测试申…