导语
在日常开发中可能对于安全这块的内容涉及的的东西不太多,但是对于Java企业级的项目来讲,Web应用达到一定的阶段就必须要考虑到安全。在Java企业级开发中比较常用的两个安全框架一个是Spring Security,另一个是Apache Shiro ,一般情况下,我们在开发的时候,这两个框架就已经是被准备好的,开发人员直接使用就可以了,但是如果想要往更高的方向去发展那么了解这两个框架就是必经之路了。下面就来看一下Spring Security 中的一些干活的东西。
一、Spring Security 和 Apache Shiro
相比较而言 Spring Security 要比Apache Shiro 多提供了一些功能,例如 LDAP、OAuth2.0、ACL、Kerberos、SAML、SSO、OpenID 等等安全认证、鉴权协议等功能,需要的时候可以通过引用添加。对于认证/授权来说更加方便灵活,并且还提供了更加细粒度的权限拆分。开发人员可以结合自己的业务场景进行合理化的整合开发。最新的Spring Security更是为响应式应用提供了安全控制的相关支持操作。
由于Spring Security 使用了Spring框架的IOC和AOP所以在使用的时候是无法脱离Spring 框架使用的。这一点上Apache Shiro 就可以独立存在。但在很多的企业级的Web应用中几乎都是用Spring框架搭建,所以说Spring Security也会兼容的比较好。所以说Spring Security依托于Spring框架的优势在企业级应用鉴权领域也是有着非常重要的地位。不过认证的了解过两个框架之后,就会发现两个框架其实大同小异。
二、认证/鉴权
Authentication/Authorization,是两个特别容易混淆的单词。其实无论是Spring Security 还是 Apache Shiro,要想理解它们的原理,就必须先搞清楚这两个词是什么意思。说白了什么是认证,认证就是解决你是谁的问题,什么是授权,授权就是解决你可以干什么的问题。简单的例子,你去高铁站坐车,你得有身份证和车票,这个时候身份证完成的工作就是认证的工作,而车票完成的工作就是鉴权的操作。如果只有认证没有授权,认证就没有意义。如果没有认证,只有授权就无法给真正的用户加入对应的权限。所以在真实的开发场景中两者一定是共同存在的。
三、过滤器
在Spring MVC中有一个概念叫做Servlet ,对于Servlet Web 的应用来说,想要通过安全控制进行管理最好的时间就是Servlet Filter。利用责任链设计模式,加上过滤器组成过滤器责任链,通过一系列的过滤策略,不同的条件进入到不同的过滤器中进行处理。通过对Filter的有效组合实现我们的业务需求。
四、RBAC模型
RBAC 基于角色的访问控制(Role-Based Access Control)。在RBAC中,权限与角色相关联,用户通过设置成相应的角色来获取这些角色所对应的权限,这样的操作极大的简化了权限管理操作。这样的管理都是需要层级之间的相互依赖,权限赋值给角色,又把角色赋予用户,这样的设计清楚明了,管理方便。当你拥有了某个角色之后,就会继承这个角色所有的功能,然后进行一些操作。
五、其他概念
在实际的开发中我们还会碰到另外的一些操作,例如说安全策略、攻击防御,反向代理、网关、堡垒机等等。还有会遇到 CSRF(Cross-site request forgery)跨站请求伪造、XSS(跨站脚本攻击)也需要有一定的了解;还有就是OAuth2.0 等协议也需要进行。