微服务架构下 Spring Boot 整合 SA-Token 使用详解

在现代开发中,微服务架构越来越受到欢迎,而鉴于其复杂性,服务间的认证与授权成为了一个不可或缺的部分。SA-Token 是一款轻量级但功能强大的 Java 权限认证框架,可以很好地与 Spring Boot 整合使用。本文将详细介绍如何在 Spring Boot 项目中集成 SA-Token,并给出相关代码示例。

1. 引入依赖

首先,需要在 Spring Boot 项目的 pom.xml 文件中引入 SA-Token 的依赖:

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.34.0</version> <!-- 请根据实际情况选择最新版本 -->
</dependency>

2. 配置 SA-Token

接下来,需在 application.ymlapplication.properties 中进行基本配置。这里是一个 YAML 配置示例:

sa-token:
  # 是否开启项目中的权限验证,默认启用
  is-dev: true
  # 超级管理员的token,在这个token下用户不能被注销和无效化
  super-token: "admin"
  # 过期时间(单位:秒)
  timeout: 7200
  # token 存储,用于支持不同的存储方式,如 Redis 等
  token:
    # 是否存入 Redis,默认 false
    is-redis: false

3. 编写认证与授权的逻辑

以下是一个简单的用户控制器示例,展示了如何使用 SA-Token 进行基本的认证与授权:

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

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

    @PostMapping("/login")
    public String login(@RequestParam String username, @RequestParam String password) {
        // 假设在数据库中检查用户
        if ("admin".equals(username) && "123456".equals(password)) {
            // 登录成功,生成token
            StpUtil.login(username);
            return "登录成功,Token: " + StpUtil.getTokenValue();
        }
        return "用户名或密码错误";
    }

    @GetMapping("/info")
    public String info() {
        // 需要登录才能访问此接口
        StpUtil.checkLogin();
        return "用户信息: " + StpUtil.getLoginId();
    }

    @GetMapping("/logout")
    public String logout() {
        StpUtil.logout();
        return "登出成功";
    }
}

在上面的代码中,我们定义了三个接口: - /login:接收用户名和密码,进行验证成功后生成 token。 - /info:获取用户信息,需要验证登录状态。 - /logout:退出登录,注销当前 token。

4. 整合到 Spring Security(可选)

如果项目中使用了 Spring Security,可以将 SA-Token 和 Spring Security 结合使用。以下是一个简单的示例:

import cn.dev33.satoken.stp.StpUtil;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SaTokenFilter extends BasicAuthenticationFilter {

    public SaTokenFilter() {
        super();
    }

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        // 从请求中获取token
        String token = request.getHeader("Authorization");
        if (token != null) {
            StpUtil.checkLogin();
        }
        chain.doFilter(request, response);
    }
}

这里我们创建了一个自定义的过滤器,通过读取请求头中的 token,结合 SA-Token 做登录状态的验证。可以在 Spring Security 的配置中将该过滤器添加到过滤链中。

5. 总结

通过以上步骤,我们在 Spring Boot 项目中实现了 SA-Token 的集成与基本使用。SA-Token 简单易用,非常适合用于微服务的认证与授权。根据项目需求,可以进一步扩展权限管理、角色设置以及多服务间的 Token 传递等功能。希望本文能对您的开发有所帮助!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部