SpringSecurity安全管理框架-(一)初识SpringSecurity

一、基本概念

Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富;

Spring Security是一个功能强大且高度可定制身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准;

Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样,SpringSecurity的真正强大之处在于可以轻松扩展以满足自定义要求。

一般Web应用需要进行认证和授权。

认证(Authentication):验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户

授权(Authorization):经过认证后判断当前用户是否有权限进行某个操作

而认证和授权就是SpringSecurity作为安全框架的核心功能。

Spring Security一般流程为:

1、当用户登录是,前端将用户输入的用户名、密码信息传输到后台,后台用一个类对象将其封装起来,通常使用的是UsernamePasswordAuthenticationToken这个类。

2、程序负责验证这个类对象,验证方法是调用Service根据Username从数据库中取用户信息到实体类的实例中,比较两者的密码,如果密码正确就成功登陆,同时把包含着用户的用户名、密码、所具有的权限等信息的类对象放到SecurityContextHolder(安全上下文容器,类似Session)中去。

3、用户访问一个资源的时候,首先判断是否是受限资源。如果是的话还要判断房钱是否未登录,没有的话就跳到登录页面。

4、如果用户已经登录,访问一个受限资源的时候,程序要根据url去数据库中取出该资源所对应的所有可以访问的角色,然后拿着当前用户的所有角色一一对比,判断用户是否可以访问(这里就是跟权限相关)。

二、Spring Security功能

接下来我们必须掌握Spring Security的核心功能有哪些,就是他能做什么。

Spring Security的核心功能主要包括如下几个:

  • 认证:解决“你是谁”的问题->解决的是系统中是否有这个“用户”(用户/设备/系统)的问题,也就是我们常说的“登录”。
  • 授权:权限控制/鉴别,解决的是系统中某个用户能够访问哪些资源,即“你能干什么”的问题。Spring Security支持基于URL的请求授权、方法访问授权、对象访问授权。
  • 防护攻击:防止身份伪造等各种攻击手段。
  • 加密功能:对密码进行加密、匹配等。
  • 会话功能:对Session进行管理。
  • RememberMe功能:实现“记住我”功能,并可以实现token令牌持久化。

三、Spring Security支持的身份认证模式

在Spring Security中,我们除了掌握几个核心功能之外,对于其身份认证模式简单了解一下即可。

在身份验证层面,Spring Security广泛支持各种身份认证模式。这些验证模式绝大多数都是由第三方提供,或相关标准组织提供的,目前Spring Security支持如下认证技术:

  • HTTP BASIC authentication headers:一个基于IEFT RFC的标准。
  • HTTP Digest authentication headers:一个基于IEFT RFC的标准。
  • HTTP X.509 client certificate exchange:一个基于IETF RFC的标准
  • LDAP:一种常见的跨平台身份验证方式。
  • Form-based authentication:用于简单的用户界面需求。
  • OpenID authentication:一种去中心化的身份认证方式。
  • Authentication based on pre-established request headers:类似于Computer Associates
  • SiteMinder,一种用户身份验证及授权的集中式安全基础方案。
  • Jasig Central Authentication Service:单点登录方案。
  • Transparent Authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker:一个Spring远程调用协议。
  • Automatic “Remember-me” authentication:允许在指定到期时间前自行重新登录系统。
  • Anonymous Authentication:允许匿名用户使用特定的身份安全访问资源。
  • Run-as authentication:允许在一个会话中变换用户身份的机制。
  • Java Authentication and authorization Service:JAAS,Java验证和授权API。
  • Java EE container authentication:允许系统继续使用容器管理这种身份验证方式、
  • Kerberos:一种使用对称密钥机制,允许客户端与服务器相互确认身份的认证协议。

四、Shiro框架简介

如果各位之前有过Java项目的开发经验,应该了解使用过另一个比较有名气的安全框架,就是Shiro。

1、Shiro起源

在Java安全领域,除了Spring Security,还有一个更久远的Shiro框架。Shiro是Apache下的一个开源安全框架,提供了身份验证、授权、密码学和会话管理等关于安全的核心功能。它的前身是JSecurity,2004年,Less Hazlewood和Jeremy Haile创办了Jsecurity。当时它们找不到适用于应用程序级别的何时Java安全框架,同时又对JAAS非常失望,于是就搞了Shiro这个框架。

2004 年到 2008 年期间,JSecurity 托管在 SourceForge 上,贡献者包括 Peter Ledbrook、Alan Ditzel 和 Tim Veil。

2008 年,JSecurity 项目贡献给了 Apache 软件基金会(ASF),并被接纳成为 Apache Incubator 项目,由导师管理,目标是成为一个顶级 Apache 项目。期间,Jsecurity 曾短暂更名为 Ki,随后因商标问题被社区更名为“Shiro”。随后项目持续在 Apache Incubator 中孵化,并增加了贡献者 KalleKorhonen。

2010 年 7 月,Shiro 社区发布了 1.0 版,随后社区创建了其项目管理委员会,并选举 Les Hazlewood 为主席。2010 年 9 月 22 日,Shrio 成为 Apache 软件基金会的顶级项目(TLP)。

2、Shiro功能

Apache Shiro也是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。Apache Shiro的首要目标是易于使用和理解,因为安全有时候是很复杂的,甚至是痛苦的,但其实没必要这样。框架应该尽可能掩盖复杂的地方,暴露一个干净而直观的API,赖建华开发人员在应用程序安全上所花费的时间。

Apache Shiro是一个拥有许多功能的综合性的安全框架,Shiro中有四大核心功能-身份验证,授权、会话管理和加密。

        1、Authentication:简称为“登录”,这是一个证明用户是谁的行为;

        2、Authorization:访问控制的过程,也就是决定“谁”可以去访问“什么”;

        3、SessionManagement:管理用户特定的会话,即使在非Web或EJB应用程序;

        4、Cryptography:通过使用加密算法保持数据安全同时易于使用;

除此之外,Shiro也提供了额外的功能,来解决在不同环境下所面临的安全问题,尤其是以下这些:

        1、WebSupport:web支持的API能够API能够轻松地保护Web应用程序;

        2、Caching:缓存是用来确保操作的快速而又高效的;

        1、Concurrency:ApacheShiro利用它的并发特性来支持多线程应用程序;

        2、Testing:测试功能来帮助编写单元测试和集成测试;

        1、RunAs:一个允许用户以另一个用户身份(如果允许)运行的功能,有时候在管理脚本时很有用;

        2、RememberMe:在会话中记住用户的身份,这样用户只需要在强制登录时登录;

3、Shiro特点

Shiro 框架具有直观、易用等特性,同时也能提供了健壮的安全性,虽然它的功能不如Spring Security那么强大,但是在常规的企业级应用中,其实也够用了。

五、Spring Security与Shiro对比

1、Spring Security优点

  • Spring Security基于Spring开发,所以Spring Security与Spring更契合;
  • Spring Security功能比Shiro更加强大,尤其是在安全防护方面;
  • Spring Security社区资源比Shiro更加丰富;
  • Spring Boot/Spring Cloud环境中,更容易集成Spring Security;
  • Spring Security具备良好的扩展性,可以满足自定义的要求;
  • Spring Security对OAuth2框架支持很好,而Shiro则对OAuth2支持不够。

2、Spring Security缺点

  • Shiro是一个轻量、简单、易于集成的老牌安全框架,而且使用流程简单清晰;反观SpringSecurity,则属于是重量级、配置繁琐、学习使用门槛高的安全框架。
  • Shiro依赖性低,不需要任何框架和容器,可以独立运行,而Spring Security需要依赖Spring容器。

3、现在常见的安全技术栈

在目前的Java体系中,我们在进行关于安全方面的开发时,到底该选择Shiro还是Spring Security哪个框架呢?其实我们可以进行如下搭配:

  • SSM+Shiro
  • Spring Boot/Spring Cloud + Spring Security

就目前而言,Shiro最大的问题在于和Spring家族的产品进行整合时较为不便。在Spring Boot推出的很长一段时间里,Shiro都没有提供相对应的starter,后来虽然有一个Shiro-Spring-boot-web-starter出来,但配置并没有简化多少。所以在Spring boot/Spring Cloud技术栈的微服务项目中,Shiro几乎不存在优势。

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值