0


在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

注解来绑定配置文件中的属性。

importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;importlombok.Data;@Data@Component@ConfigurationProperties(prefix ="security")publicclassSecurityProperties{/**
     * 排除路径
     */privateString[] 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的拦截器,并将排除的路径应用到拦截器中。

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;importcn.dev33.satoken.interceptor.SaInterceptor;importcn.dev33.satoken.router.SaRouter;importcn.dev33.satoken.stp.StpUtil;@ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{@AutowiredprivateSecurityProperties securityProperties;@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(newSaInterceptor(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的文档进行进一步配置和扩展。

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/weixin_53742691/article/details/139610982
版权归原作者 IT小辉同学 所有, 如有侵权,请联系我们删除。

“在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行”的评论:

还没有评论