sa-token
是一个轻量级的 Java 权限认证框架,它可以很方便地集成到 Spring Boot 项目中,以提供简洁的认证和授权功能。虽然 sa-token
本身并不直接支持 OAuth 2.0 的集成,但你可以将 OAuth 2.0 的认证流程与 sa-token
的权限控制结合起来使用。
以下是一个简单的示例,展示了如何将 sa-token
整合到 Spring Boot 项目中:
- 添加
sa-token
的依赖到你的pom.xml
文件中:
xml复制代码
<dependency> | |
<groupId>cn.dev33</groupId> | |
<artifactId>sa-token-spring-boot-starter</artifactId> | |
<version>最新版本</version> | |
</dependency> |
确保你使用的是最新的 sa-token
版本。
- 在
application.yml
或application.properties
中配置sa-token
:
yaml复制代码
# application.yml 示例 | |
sa-token: | |
token-name: Authorization # token名称 (header中key) | |
token-type: bearer # token类型 (header中value的前缀) | |
timeout: 3600 # token 过期时间, 单位秒 | |
activity-timeout: -1 # 临时token有效时间, 单位秒,-1表示永不过期 | |
is-concurrent: true # 是否允许同一账号并发登录, 默认false | |
is-share: false # 在多个服务之间共享token时,需要设置为true |
- 创建一个配置类来初始化
sa-token
:
java复制代码
import cn.dev33.satoken.context.SaHolder; | |
import cn.dev33.satoken.filter.SaTokenFilter; | |
import cn.dev33.satoken.integration.springboot.SaTokenAutoConfiguration; | |
import cn.dev33.satoken.integration.springboot.properties.SaTokenProperties; | |
import org.springframework.boot.autoconfigure.AutoConfigureAfter; | |
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
@Configuration | |
@AutoConfigureAfter(SaTokenAutoConfiguration.class) | |
public class SaTokenConfig { | |
@Bean | |
@ConditionalOnMissingBean | |
public SaTokenFilter saTokenFilter(SaTokenProperties saTokenProperties) { | |
return new SaTokenFilter(saTokenProperties); | |
} | |
// 你可以在这里添加自定义的 SaToken 初始化代码 | |
// 例如:设置全局的权限验证规则、登录验证处理等 | |
@Bean | |
public void initSaToken() { | |
// 初始化 Sa-Token,并设置全局的权限验证规则 | |
SaHolder.setGlobalAuthHandler((request, response, exception) -> { | |
// 这里可以自定义全局的权限验证逻辑 | |
// 例如:返回自定义的未授权提示信息 | |
response.setContentType("application/json;charset=UTF-8"); | |
response.getWriter().write("{\"code\":401,\"msg\":\"未授权\"}"); | |
response.getWriter().flush(); | |
response.getWriter().close(); | |
}); | |
} | |
} |
- 在你的 Controller 中使用
sa-token
提供的注解来进行权限控制:
java复制代码
import cn.dev33.satoken.annotation.SaCheckPermission; | |
import cn.dev33.satoken.annotation.SaCheckRole; | |
import org.springframework.web.bind.annotation.GetMapping; | |
import org.springframework.web.bind.annotation.RestController; | |
@RestController | |
public class MyController { | |
@GetMapping("/needPermission") | |
@SaCheckPermission("permission1") // 这里会校验用户是否具有 permission1 权限 | |
public String needPermission() { | |
return "you have permission1"; | |
} | |
@GetMapping("/needRole") | |
@SaCheckRole("admin") // 这里会校验用户是否具有 admin 角色 | |
public String needRole() { | |
return "you are admin"; | |
} | |
} |