御坂主机 发表于 2024-6-13 13:54:16

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

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的依赖:

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

2.3 配置文件

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

sa-token.token-name=Authorization
sa-token.timeout=3600
sa-token.is-print=false

3. 实现权限管理功能

3.1 Sa-Token配置类

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

package com.example.demo.config;

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

@Configuration
public class SaTokenConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
      registry.addInterceptor(new SaRouteInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login");
    }
}

3.2 用户登录接口

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

package com.example.demo.controller;

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

@RestController
@RequestMapping("/auth")
public class AuthController {

    @PostMapping("/login")
    public String login(@RequestParam String username, @RequestParam String password) {
      // 假设用户名和密码都为admin
      if("admin".equals(username) && "admin".equals(password)) {
            StpUtil.login(10001);
            return StpUtil.getTokenValue();
      }
      return "Login Failed";
    }
}

3.3 权限校验

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

package com.example.demo.controller;

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

@RestController
@RequestMapping("/user")
public class UserController {

    @SaCheckLogin
    @GetMapping("/info")
    public String userInfo() {
      return "This is user info.";
    }
}

3.4 自定义权限验证

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

package com.example.demo.controller;

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

@RestController
@RequestMapping("/admin")
public class AdminController {

    @SaCheckPermission("admin-permission")
    @GetMapping("/dashboard")
    public String adminDashboard() {
      return "This is admin dashboard.";
    }
}

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,使得权限管理变得轻松高效。希望本文对你有所帮助,让你在项目中能够更轻松地实现权限控制功能。

页: [1]
查看完整版本: 开发札记 - 基于Sa-Token构建权限系统实战