简介: Spring Security 是 Spring 官方提供 的安全框架,功能强大,支持 用户认证、角色权限管理、OAuth2、JWT、CSRF 防护、会话管理 等。
特点: ✅ 基于过滤器链,灵活可扩展 ✅ 支持 RBAC(基于角色的访问控制) ✅ 可集成 OAuth2、JWT 实现单点登录(SSO) ✅ 适用于 Spring Boot & Spring MVC 项目
适用场景: 🔹 需要 细粒度权限控制,如接口级、方法级授权 🔹 适用于 企业级应用,如管理系统、微服务项目
示例:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin()
.and()
.logout();
return http.build();
}
}👉 适合: Spring 生态开发者,微服务、Web 项目
简介: Apache Shiro 是一个轻量级的 Java 安全框架,专注于 认证、授权、加密和会话管理。
特点: ✅ 比 Spring Security 更简单,上手快 ✅ 适用于 独立 Java 应用(非 Spring 项目) ✅ 支持 RBAC、权限粒度控制 ✅ 可扩展,支持 自定义 Realm 实现认证
适用场景: 🔹 非 Spring 生态 的 Java 项目 🔹 需要快速集成权限控制,开发成本低
示例:
// 定义用户权限
DefaultSecurityManager securityManager = new DefaultSecurityManager();
UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
SecurityUtils.getSubject().login(token);👉 适合: 传统 Java Web 项目,轻量级应用
简介: Keycloak 是 Red Hat 维护的开源 IAM(身份和访问管理)解决方案,支持 OAuth2、OpenID Connect(OIDC)、SAML 等协议。
特点: ✅ 无需代码实现认证系统,直接集成即可使用 ✅ 提供 Web UI 控制台,可管理用户、角色、权限 ✅ 支持 单点登录(SSO),适用于大型企业系统 ✅ 可与 Spring Security、Shiro 结合使用
适用场景: 🔹 需要统一身份认证管理(如 SSO) 的企业级项目 🔹 支持 OAuth2 / OpenID / SAML 认证
示例(Spring Security 集成 Keycloak):
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.oauth2Login();
return http.build();
}👉 适合: 需要 SSO、大型企业应用、微服务架构
简介: Casbin 是一个支持 基于策略(PBAC) 访问控制的权限框架,适用于 复杂权限规则 管理,如 RBAC、ABAC(属性控制)、RESTful API 级别控制。
特点: ✅ 支持 RBAC、ABAC、PBAC 权限模型 ✅ 高效 基于策略(Policy-based) 的权限管理 ✅ 支持多种持久化存储(数据库、Redis、文件)
适用场景: 🔹 需要复杂权限规则(如动态授权) 🔹 适用于 REST API、微服务权限管理
示例(定义权限规则):
Enforcer enforcer = new Enforcer("config.conf", "policy.csv");
boolean allowed = enforcer.enforce("alice", "data1", "read");👉 适合: API 级权限管理、复杂业务规则控制
简介: OPA 是一个 云原生的策略引擎,用于服务之间的访问控制,支持 Kubernetes、微服务权限管理。
特点: ✅ 使用 Rego 语言 编写权限策略 ✅ 适用于 微服务、Kubernetes 访问控制 ✅ 提供 独立 API 服务,可与 Java 项目集成
适用场景: 🔹 Kubernetes(K8s)应用权限控制 🔹 云原生微服务架构
👉 适合: Kubernetes、云原生应用
简介: Sa-Token 是一个 国产的 Java 权限认证框架,比 Spring Security 更轻量、更易上手,支持 多种认证方式、RBAC、OAuth2、JWT、会话管理 等。
特点: ✅ 极简 API,上手快(比 Spring Security 简单) ✅ 内置 Token 认证(支持 JWT) ✅ 支持分布式会话、单点登录(SSO)、二级缓存 ✅ 内置多种权限控制模型(角色、用户、自定义权限)
适用场景: 🔹 不想用 Spring Security 但又需要权限管理的项目 🔹 对性能要求高,需要轻量级方案 🔹 适用于小型、中型项目,支持 Spring Boot、微服务
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.35.0</version>
</dependency>2️⃣ 登录认证
// 用户登录
StpUtil.login(1001);
System.out.println("当前登录用户ID:" + StpUtil.getLoginId());3️⃣ 权限控制
// 检查是否拥有权限
StpUtil.checkPermission("user:add");
// 判断是否拥有某个角色
if (StpUtil.hasRole("admin")) {
System.out.println("用户是管理员");
}4️⃣ 注解式权限控制
@RestController
@RequestMapping("/user")
public class UserController {
@SaCheckLogin // 需要登录
@GetMapping("/info")
public String userInfo() {
return "用户信息";
}
@SaCheckRole("admin") // 只有管理员可访问
@GetMapping("/admin")
public String adminPage() {
return "管理员页面";
}
}特性 | Spring Security | Sa-Token |
|---|---|---|
上手难度 | 较高,API 复杂,配置较多 | 简单,API 设计极简 |
认证方式 | 支持用户名/密码、OAuth2、JWT | 内置 Token 认证,支持 JWT |
权限模型 | 角色(RBAC)、方法级别安全 | 角色(RBAC)、权限粒度控制 |
单点登录(SSO) | 需要集成 Keycloak 等组件 | 内置支持 |
适用场景 | 大型企业级应用,Spring Boot 微服务 | 轻量级项目,小型/中型系统 |
框架 | 适用场景 |
|---|---|
Spring Security | 企业级、Spring 生态项目,功能最全 |
Sa-Token | 轻量级项目,简单易用,国产框架 |
Shiro | 独立 Java Web 项目,轻量级认证 |
Keycloak | 企业级 SSO、OAuth2 认证 |
Casbin | 复杂权限管理(PBAC、RBAC、ABAC) |
OPA | 云原生 Kubernetes 权限管理 |
🔹 如果你用 Spring Boot,想要功能强大,选 Spring Security 🔹 如果你想要简单、好用,选 Sa-Token(特别是小型/中型项目) 🔹 如果你不想用 Spring 框架,选 Shiro 🔹 如果你的系统需要 OAuth2 / SSO 认证,选 Keycloak 🔹 如果你的项目权限规则复杂(如 API 级控制),选 Casbin 🔹 如果你的项目是微服务/Kubernetes,选 OPA
💬 你用过哪些权限框架?有啥坑?欢迎留言交流! 🚀🚀🚀