安全框架Shiro和Spring Security比较

安全框架Shiro和Spring Security比较

1.Shiro

1.1 Shiro简介

Apache Shiro是一个强大且易用的Java安全框架,可以很是清晰的处理认证、受权、管理会话以及密码加密。使用Shiro的易于理解的API,您能够快速、轻松地得到任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。对于我来讲,与Spring Security相比,Shiro更加主流、也更加简单易用,它不可是适用于javaSE环境,也适用于javaEE环境;最重要的是谁简单易懂,且可以快速实现要求,我就用谁!!!html

1.2 Shiro架构组成

在这里插入图片描述

  • subject:主体,能够是用户也能够是程序,主体要访问系统,系统须要对主体进行认证、受权。前端

  • securityManager:安全管理器,主体进行认证和受权都是经过securityManager进行,是shiro的心脏。java

  • realm:域,领域,至关于数据源,通俗意义的DAO层,经过realm存取认证、受权相关数据。web

1.3 Shiro功能介绍

在这里插入图片描述

  • Authentication
    认证,也就是登录,咱们能够利用Shiro完成登录,登陆时的密码匹配,就是Shiro帮咱们完成的算法

  • Authorization
    受权,当咱们点一个链接或一个按钮的时候,Shiro会帮咱们判断你有没有这个权限,有权先便可执行spring

  • SessionManagement
    Shiro向咱们提供的Session
    咱们在web环境下可使用SesCryptsion,固然,这个是httpSession,若是使用Shiro的话,即使你身处非web环境下,咱们也可使用Session,那个Session,就是Shiro给咱们提供的;数据库

  • Cryptography
    加密,到后面会有具体详解;编程

  • Web Support
    能够很容易的跟,JavaEE应用进行集成;缓存

  • Caching
    能够在多线程的状况下进行受权,认证;安全

  • Testing
    测试

  • Caching
    Shiro提供了缓存模块,让咱们的运行速度更快;

  • Run As
    让已经登陆的用户,以另一个用户的身份,来操做当前的系统;

  • RememberMe
    记住我,用于登陆时记住用户登陆信息。/

1.4 Shrio特色介绍

  1. 易于理解的 Java Security API;
  2. 简单的身份认证(登陆),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
  3. 对角色的简单的签权(访问控制),支持细粒度的签权;
  4. 支持一级缓存,以提高应用程序的性能;
  5. 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
  6. 异构客户端会话访问;
  7. 很是简单的加密 API;
  8. 不跟任何的框架或者容器捆绑,能够独立运行。

2. Spring Security

2.1 Spring Security简介

Spring Security是一个可以为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组能够在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减小了为企业系统安全控制编写大量重复代码的工做。它是一个轻量级的安全框架,它确保基于Spring的应用程序提供身份验证和受权支持。它与Spring MVC有很好地集成,并配备了流行的安全算法实现捆绑在一块儿。安全主要包括两个操做“认证”与“验证”(有时候也会叫作权限控制)。“认证”是为用户创建一个其声明的角色的过程,这个角色能够一个用户、一个设备或者一个系统。“验证”指的是一个用户在你的应用中可以执行某个操做。在到达受权判断以前,角色已经在身份认证过程当中创建了。

2.2 对Spring Security我的见解

不过我认为Spring Security就是由于Spring而出名,可是它比shiro在使用过程当中相对比较难一些,且它所拥有的功能,大部分Shrio均可以实现。尽管Spring Security对Oauth、OpenID也有支持,Shiro则须要本身手动实现,可是这两个功能现用户与各个产品间单点登陆已经能够经过cookies实现。因此偶力推Shrio,除非是甲方要求(这得重点标注,没办法,甲方有时候才是真理啊!!!)

2.3 Spring Security通常流程为

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

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

  3. 用户访问一个资源的时候,首先判断是不是受限资源。若是是的话还要判断当前是否未登陆,没有的话就跳到登陆页面。

  4. 若是用户已经登陆,访问一个受限资源的时候,程序要根据url去数据库中取出该资源所对应的全部能够访问的角色,而后拿着当前用户的全部角色一一对比,判断用户是否能够访问。

2.4 Shiro和Spring Security比较

Shiro比Spring更容易使用,实现和最重要的理解

Spring Security更加知名的惟一缘由是由于品牌名称

“Spring”以简单而闻名,但讽刺的是不少人发现安装Spring Security很难

然而,Spring Security却有更好的社区支持

Apache Shiro在Spring Security处理密码学方面有一个额外的模块

Spring-security 对spring 结合较好,若是项目用的springmvc ,使用起来很方便。可是若是项目中没有用到spring,那就不要考虑它了。

Shiro 功能强大、且 简单、灵活。是Apache 下的项目比较可靠,且不跟任何的框架或者容器绑定,能够独立运行


参考:

相关文章
相关标签/搜索