首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >开发常见权限框架

开发常见权限框架

作者头像
伯灵
发布2026-01-21 09:43:27
发布2026-01-21 09:43:27
2330
举报

1. Spring Security(主流、强大、官方推荐)

简介: Spring Security 是 Spring 官方提供 的安全框架,功能强大,支持 用户认证、角色权限管理、OAuth2、JWT、CSRF 防护、会话管理 等。

特点: ✅ 基于过滤器链,灵活可扩展 ✅ 支持 RBAC(基于角色的访问控制) ✅ 可集成 OAuth2、JWT 实现单点登录(SSO) ✅ 适用于 Spring Boot & Spring MVC 项目

适用场景: 🔹 需要 细粒度权限控制,如接口级、方法级授权 🔹 适用于 企业级应用,如管理系统、微服务项目

示例

代码语言:javascript
复制
@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 项目


2. Apache Shiro(轻量、易用)

简介: Apache Shiro 是一个轻量级的 Java 安全框架,专注于 认证、授权、加密和会话管理

特点: ✅ 比 Spring Security 更简单,上手快 ✅ 适用于 独立 Java 应用(非 Spring 项目) ✅ 支持 RBAC、权限粒度控制 ✅ 可扩展,支持 自定义 Realm 实现认证

适用场景: 🔹 非 Spring 生态 的 Java 项目 🔹 需要快速集成权限控制,开发成本低

示例

代码语言:javascript
复制
// 定义用户权限
DefaultSecurityManager securityManager = new DefaultSecurityManager();
UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
SecurityUtils.getSubject().login(token);

👉 适合: 传统 Java Web 项目,轻量级应用


3. Keycloak(企业级认证、OAuth2 & SSO 方案)

简介: Keycloak 是 Red Hat 维护的开源 IAM(身份和访问管理)解决方案,支持 OAuth2、OpenID Connect(OIDC)、SAML 等协议。

特点: ✅ 无需代码实现认证系统,直接集成即可使用 ✅ 提供 Web UI 控制台,可管理用户、角色、权限 ✅ 支持 单点登录(SSO),适用于大型企业系统 ✅ 可与 Spring Security、Shiro 结合使用

适用场景: 🔹 需要统一身份认证管理(如 SSO) 的企业级项目 🔹 支持 OAuth2 / OpenID / SAML 认证

示例(Spring Security 集成 Keycloak)

代码语言:javascript
复制
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.oauth2Login();
    return http.build();
}

👉 适合: 需要 SSO、大型企业应用、微服务架构


4. Casbin(基于策略的访问控制)

简介: Casbin 是一个支持 基于策略(PBAC) 访问控制的权限框架,适用于 复杂权限规则 管理,如 RBAC、ABAC(属性控制)、RESTful API 级别控制

特点: ✅ 支持 RBAC、ABAC、PBAC 权限模型 ✅ 高效 基于策略(Policy-based) 的权限管理 ✅ 支持多种持久化存储(数据库、Redis、文件)

适用场景: 🔹 需要复杂权限规则(如动态授权) 🔹 适用于 REST API、微服务权限管理

示例(定义权限规则)

代码语言:javascript
复制
Enforcer enforcer = new Enforcer("config.conf", "policy.csv");
boolean allowed = enforcer.enforce("alice", "data1", "read");

👉 适合: API 级权限管理、复杂业务规则控制


5. OPA(Open Policy Agent,云原生权限框架)

简介: OPA 是一个 云原生的策略引擎,用于服务之间的访问控制,支持 Kubernetes、微服务权限管理。

特点: ✅ 使用 Rego 语言 编写权限策略 ✅ 适用于 微服务、Kubernetes 访问控制 ✅ 提供 独立 API 服务,可与 Java 项目集成

适用场景: 🔹 Kubernetes(K8s)应用权限控制 🔹 云原生微服务架构

👉 适合: Kubernetes、云原生应用

6. Sa-Token(国人开发,轻量级 Java 权限框架)

简介: Sa-Token 是一个 国产的 Java 权限认证框架,比 Spring Security 更轻量、更易上手,支持 多种认证方式、RBAC、OAuth2、JWT、会话管理 等。

特点: ✅ 极简 API,上手快(比 Spring Security 简单) ✅ 内置 Token 认证(支持 JWT)支持分布式会话、单点登录(SSO)、二级缓存内置多种权限控制模型(角色、用户、自定义权限)

适用场景: 🔹 不想用 Spring Security 但又需要权限管理的项目 🔹 对性能要求高,需要轻量级方案 🔹 适用于小型、中型项目,支持 Spring Boot、微服务


示例:Sa-Token 权限控制

1️⃣ 引入依赖
代码语言:javascript
复制
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.35.0</version>
</dependency>

2️⃣ 登录认证

代码语言:javascript
复制
// 用户登录
StpUtil.login(1001);  
System.out.println("当前登录用户ID:" + StpUtil.getLoginId());

3️⃣ 权限控制

代码语言:javascript
复制
// 检查是否拥有权限
StpUtil.checkPermission("user:add");

// 判断是否拥有某个角色
if (StpUtil.hasRole("admin")) {
    System.out.println("用户是管理员");
}

4️⃣ 注解式权限控制

代码语言:javascript
复制
@RestController
@RequestMapping("/user")
public class UserController {

    @SaCheckLogin  // 需要登录
    @GetMapping("/info")
    public String userInfo() {
        return "用户信息";
    }

    @SaCheckRole("admin")  // 只有管理员可访问
    @GetMapping("/admin")
    public String adminPage() {
        return "管理员页面";
    }
}

Sa-Token vs Spring Security

特性

Spring Security

Sa-Token

上手难度

较高,API 复杂,配置较多

简单,API 设计极简

认证方式

支持用户名/密码、OAuth2、JWT

内置 Token 认证,支持 JWT

权限模型

角色(RBAC)、方法级别安全

角色(RBAC)、权限粒度控制

单点登录(SSO)

需要集成 Keycloak 等组件

内置支持

适用场景

大型企业级应用,Spring Boot 微服务

轻量级项目,小型/中型系统


7. 总结:Java 权限框架选择指南

框架

适用场景

Spring Security

企业级、Spring 生态项目,功能最全

Sa-Token

轻量级项目,简单易用,国产框架

Shiro

独立 Java Web 项目,轻量级认证

Keycloak

企业级 SSO、OAuth2 认证

Casbin

复杂权限管理(PBAC、RBAC、ABAC)

OPA

云原生 Kubernetes 权限管理

8. 如何选择?

🔹 如果你用 Spring Boot,想要功能强大,选 Spring Security 🔹 如果你想要简单、好用,选 Sa-Token(特别是小型/中型项目) 🔹 如果你不想用 Spring 框架,选 Shiro 🔹 如果你的系统需要 OAuth2 / SSO 认证,选 Keycloak 🔹 如果你的项目权限规则复杂(如 API 级控制),选 Casbin 🔹 如果你的项目是微服务/Kubernetes,选 OPA

💬 你用过哪些权限框架?有啥坑?欢迎留言交流! 🚀🚀🚀

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Spring Security(主流、强大、官方推荐)
  • 2. Apache Shiro(轻量、易用)
  • 3. Keycloak(企业级认证、OAuth2 & SSO 方案)
  • 4. Casbin(基于策略的访问控制)
  • 5. OPA(Open Policy Agent,云原生权限框架)
  • 6. Sa-Token(国人开发,轻量级 Java 权限框架)
  • 示例:Sa-Token 权限控制
    • 1️⃣ 引入依赖
  • Sa-Token vs Spring Security
  • 7. 总结:Java 权限框架选择指南
  • 8. 如何选择?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档