找回密码
 立即注册
查看: 395|回复: 0

[后端] 开发札记 - 基于Sa-Token构建权限系统实战

[复制链接]

224

主题

0

回帖

773

积分

高级会员

积分
773
发表于 2024-6-13 13:54:16 | 显示全部楼层 |阅读模式
1. 引言

在现代Web应用开发中,权限管理系统是必不可少的部分。它能够有效地控制用户对资源的访问权限,保证系统的安全性和稳定性。Sa-Token是一个轻量级的java权限认证框架,使用简单且功能强大。本文将详细介绍如何基于Sa-Token构建一个完整的权限系统。

1.1 准备工作

在开始实际编码之前,我们需要准备以下环境和工具:

(1) Java 8或更高版本
(2) Spring Boot 2.x
(3) Sa-Token 1.23.0
(4) 一个合适的IDE,如IntelliJ IDEA

2. Spring Boot项目配置

2.1 创建Spring Boot项目

可以通过Spring Initializr(https://start.spring.io/)快速生成一个Spring Boot项目,选择以下依赖:

(1) Spring Web
(2) Lombok
(3) Spring Boot DevTools

下载并解压生成的项目,并使用IDE打开。

2.2 添加Sa-Token依赖

在pom.xml文件中添加Sa-Token的依赖:

  1. <dependency>
  2.     <groupId>cn.dev33</groupId>
  3.     <artifactId>sa-token-spring-boot-starter</artifactId>
  4.     <version>1.23.0</version>
  5. </dependency>
复制代码


2.3 配置文件

在src/main/resources目录下的application.properties文件中添加基本配置:

  1. sa-token.token-name=Authorization
  2. sa-token.timeout=3600
  3. sa-token.is-print=false
复制代码

3. 实现权限管理功能

3.1 Sa-Token配置类

首先,创建一个配置类,用于初始化Sa-Token的相关配置:

  1. package com.example.demo.config;

  2. import cn.dev33.satoken.interceptor.SaRouteInterceptor;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

  6. @Configuration
  7. public class SaTokenConfig implements WebMvcConfigurer {

  8.     @Override
  9.     public void addInterceptors(InterceptorRegistry registry) {
  10.         registry.addInterceptor(new SaRouteInterceptor())
  11.                 .addPathPatterns("/**")
  12.                 .excludePathPatterns("/login");
  13.     }
  14. }
复制代码

3.2 用户登录接口

创建一个控制器类,实现用户登录功能,并生成Token:

  1. package com.example.demo.controller;

  2. import cn.dev33.satoken.stp.StpUtil;
  3. import org.springframework.web.bind.annotation.*;

  4. @RestController
  5. @RequestMapping("/auth")
  6. public class AuthController {

  7.     @PostMapping("/login")
  8.     public String login(@RequestParam String username, @RequestParam String password) {
  9.         // 假设用户名和密码都为admin
  10.         if("admin".equals(username) && "admin".equals(password)) {
  11.             StpUtil.login(10001);
  12.             return StpUtil.getTokenValue();
  13.         }
  14.         return "Login Failed";
  15.     }
  16. }
复制代码


3.3 权限校验

创建一个控制器类,实现需要权限校验的接口:

  1. package com.example.demo.controller;

  2. import cn.dev33.satoken.annotation.SaCheckLogin;
  3. import org.springframework.web.bind.annotation.*;

  4. @RestController
  5. @RequestMapping("/user")
  6. public class UserController {

  7.     @SaCheckLogin
  8.     @GetMapping("/info")
  9.     public String userInfo() {
  10.         return "This is user info.";
  11.     }
  12. }
复制代码


3.4 自定义权限验证

如果需要更细粒度的权限控制,可以使用注解@SaCheckPermission进行权限校验:

  1. package com.example.demo.controller;

  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import org.springframework.web.bind.annotation.*;

  4. @RestController
  5. @RequestMapping("/admin")
  6. public class AdminController {

  7.     @SaCheckPermission("admin-permission")
  8.     @GetMapping("/dashboard")
  9.     public String adminDashboard() {
  10.         return "This is admin dashboard.";
  11.     }
  12. }
复制代码


4. 测试与总结

4.1 测试步骤

(1) 启动Spring Boot应用。
(2) 使用Postman或其他工具向http://localhost:8080/auth/login发送POST请求,参数为username和password,值均为admin。成功登录后会返回一个Token。
(3) 在访问其他需要权限的接口时,将Token放在请求头的Authorization字段中,即可访问。

4.2 总结

通过以上步骤,我们成功地基于Sa-Token构建了一个简单的权限系统。Sa-Token提供了强大的功能和简洁的API,使得权限管理变得轻松高效。希望本文对你有所帮助,让你在项目中能够更轻松地实现权限控制功能。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 13:36 , Processed in 0.073236 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表