同比
必须用吗/有同类吗?
当然不是绝对,不使用框架的话,完全可以自己定义扮演各作用的filter,在filter里面做认证,授权,页面显示用标签之类控制,
我先贴上一段官方的推荐:
人们使用 Spring Security的原因有很多,但是大部分项目是发现 Java EE的Servlet 规范或者EJB规范对企业级应用场景提供的安全特性不够深入。提到这些规范,要认识到的一点是,在war包或者ear包的级别上,这些安全机制是不可以移植的。意思就是,如果我们使用了不同的服务器环境,我们通常需要为新的服务器环境重新配置或者开发系统的安全机制。使用Spring Security可以克服这些问题,并且可以给你带来大量的其他有用的、可以自定义的特性。
官方说了三点,一是深入,二是可移植,还可以自定义。
官方说的我和Shiro比较了下,刚才在介绍权限的实现中,我们有提到,除了SS4,也有其它的实现,如Apache Shiro
两者比较为:SS4除了不能脱离Spring,shiro的功能SS4都有。而且Spring Security对Oauth、OpenID也有支持, Shiro则需要自己手动实现。Spring Security的权限细粒度更高
个人在使用中的体验:在认识Spring Security之前,所有的权限验证逻辑都混杂在业务逻辑中,用户的每个操作以前可能都需要对用户是否有进行该项操作的权限进行判断,来达到认证授权的目的。类似这样的权限验证逻辑代码被分散在系统的许多地方,难以维护
也有缺点:
现在的SpringSecurity filter多,配置项多,有些地方需要查,有一定的学习成本。
总结:选择哪个根据自己的业务来定,单就Spring Security的话,掌握的话用起来挺方便的,尤其想做细粒度的控制的话,Spring Security考虑的比较全面,和Spring结合有优势。
说完了SS4的同比优缺点,再说下单就Spring Security的好处。
单就Spring Security的好处
因为 Spring Security 基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。
它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作
可以总结为:轻量<大小,开销,非侵入>,有背景<Spring容器,易开发,AOP,IoC等特性>
why 4 not 3?
除了3的功能4都有外,还修复了很多关键性的bug,以及增加了相当多的特性如SCRF, 并且有些语法两者不兼容,考虑以后长远的使用,所以以4为中心。