SpringBoot使用Sa-Token实现路径拦截和特定接口放行

 更新时间:2024年06月12日 08:23:42   作者:IT小辉同学  
这篇文章主要介绍了SpringBoot使用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 {

    @Autowired
    private SecurityProperties securityProperties;

    @Override
    public 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应用程序,验证配置是否生效。以下是一些测试步骤:

  • 访问排除路径

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

    • 尝试访问其他未排除的路径,如/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的文档进行进一步配置和扩展。

以上就是SpringBoot使用Sa-Token实现路径拦截和特定接口放行的详细内容,更多关于SpringBoot Sa-Token拦截和放行的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot嵌入式Web容器原理与使用介绍

    SpringBoot嵌入式Web容器原理与使用介绍

    Web开发的核心内容主要包括内嵌的Servlet容器和SpringMVCSpringBoot使用起来非常简洁,大部分配置都有SpringBoot自动装配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • idea左侧的commit框设置显示出来方式

    idea左侧的commit框设置显示出来方式

    在IDEA中显示左侧的commit框,首先通过File-Settings-Version Control-Commit进行设置,然后勾选Use non-modal commit interface完成
    2025-01-01
  • 一文详解Java中的监听器(Listener)

    一文详解Java中的监听器(Listener)

    这篇文章主要介绍了Java中监听器(Listener)的相关资料,监听器模式是一种设计模式,用于处理异步事件和通知,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • JDBC下Idea添加mysql-jar包的详细过程

    JDBC下Idea添加mysql-jar包的详细过程

    这篇文章主要介绍了JDBC下Idea添加mysql-jar包的详细过程,添加jar包首先到官网下载jar包,然后idea导入jar包,在就是检查,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • 详解JavaWeb中的 Listener

    详解JavaWeb中的 Listener

    JavaWeb里面的listener是通过观察者设计模式进行实现的。下面通过本文给大家详细介绍javaweb中的listener,感兴趣的朋友一起看看吧
    2016-09-09
  • JDK26新特性之语法、并发、性能与安全全面升级教程

    JDK26新特性之语法、并发、性能与安全全面升级教程

    Java26是甲骨文公司推出的Java编程语言第26个版本(Oracle JDK 26),于2026年3月17日发布,该版本包含数千项改进,旨在提升开发效率、简化语法,并增强AI集成与加密能力,这篇文章主要介绍了JDK26新特性之语法、并发、性能与安全全面升级的相关资料,需要的朋友可以参考下
    2026-05-05
  • apache commons工具集代码详解

    apache commons工具集代码详解

    这篇文章主要介绍了apache commons工具集代码详解,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • 细数java for循环中的那些坑

    细数java for循环中的那些坑

    这篇文章主要介绍了Java for循环方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • Java接口名称冲突问题的讲解

    Java接口名称冲突问题的讲解

    今天小编就为大家分享一篇关于Java接口名称冲突问题的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • springboot如何引入外部yml配置文件

    springboot如何引入外部yml配置文件

    这篇文章主要介绍了springboot如何引入外部yml配置文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论