Spring Security vs Shiro vs Sa-Token

一句话总结:

  • Spring Security:大公司专业保安队,功能全面但配置复杂
  • Shiro:轻便灵活的安保工具包,上手简单但功能有限
  • Sa-Token:国产智能门禁系统,开箱即用,代码极简

对比表格(核心差异)

特性 Spring Security Shiro Sa-Token
学习成本 高(需要理解整套安全体系) 中(模块化设计) 低(注解驱动,API简单)
配置复杂度 复杂(XML/JavaConfig) 中等(INI配置或Java) 极简(几乎零配置)
功能覆盖 全(认证、授权、OAuth2等) 基础认证+授权 基础认证+授权+踢人下线等
代码量 多(模板代码多) 中等 少(一行注解完成校验)
社区生态 国际主流(Spring家族) 国际活跃(Apache项目) 国内活跃(Gitee高星)

类比解释:

场景:公司安保系统
  1. Spring Security

    • 像一个专业保安公司,提供 全套方案:门禁、监控、消防、访客登记。
    • 但需要你 画图纸、写流程(配置复杂),适合大型集团(复杂系统)。
    • 例子:配置一个OAuth2登录需要写200行代码。
  2. Shiro

    • 像一套 标准化安保工具包(门锁+摄像头+手电筒)。
    • 你可以自由组合(模块化),但 高级功能要自己造轮子(如分布式会话)。
    • 例子:实现"记住我"功能需要手动处理Cookie和缓存。
  3. Sa-Token

    • 像一套 智能门禁系统,喊一声"开门"就能用(注解驱动)。
    • 自带 实用小功能:一键踢人下线、自动续签token、多账号体系隔离。
    • 例子 :踢人下线只需一行代码:StpUtil.kickout(10001);

代码对比(登录校验)

1. Spring Security
java 复制代码
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/profile").authenticated() // 登录校验
            .and().formLogin();
    }
}
// 需要搭配UserDetailsService和PasswordEncoder配置
2. Shiro
java 复制代码
// 1. 编写Shiro过滤器配置
@Bean
public ShiroFilterFactoryBean shiroFilter() {
    ShiroFilterFactoryBean filter = new ShiroFilterFactoryBean();
    filter.setFilterChainDefinitionMap(Map.of("/profile", "authc")); // 登录校验
    return filter;
}
// 2. 实现Realm类处理认证逻辑(需手动写代码)
3. Sa-Token
java 复制代码
@SaCheckLogin // 直接加注解,结束!
@GetMapping("/profile")
public String profile() {
    return "用户信息";
}

应用场景推荐

  • 选 Spring Security
    企业级应用、需要OAuth2/单点登录/微服务安全、深度集成Spring生态。
  • 选 Shiro
    小型项目、快速上手、需要灵活定制权限模型。
  • 选 Sa-Token
    中小型项目、追求代码简洁、需要快速实现踢人/多端登录等功能。

面试加分回答

  1. Sa-Token 的优势

    • 独创 "无Cookie"模式(解决跨域难题)
    • 自带 路由拦截鉴权(类似网关权限控制)
    • 分布式会话只需引入Redis(无需额外代码)
  2. Spring Security 的痛点

    • 学习曲线陡峭(如 SecurityContextHolder 的设计)
    • 重复造轮子(如用 @PreAuthorize 时仍需手动处理权限表)
  3. Shiro 的不足

    • 默认会话管理不适合分布式场景
    • 注解功能弱(如不支持SpEL表达式)

一句话收尾

  • Spring Security 是航母,Shiro 是瑞士军刀,Sa-Token 是智能工具箱 ------ 根据业务规模和技术栈选最顺手的即可!
相关推荐
2601_962055974 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
EXI-小洲4 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
2601_961901706 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
Lost of 程序猿6 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
何以解忧,唯有..6 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
QQ_21696290967 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
前端 贾公子8 小时前
第09章:上下文与记忆 (2)
java·服务器·前端
2601_962203518 小时前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理8 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒8 小时前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端