开发札记 - 基于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]