Apache Shiro是一个强大且易用的Java安全框架,可以很是清晰的处理认证、受权、管理会话以及密码加密。使用Shiro的易于理解的API,您能够快速、轻松地得到任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。对于我来讲,与Spring Security相比,Shiro更加主流、也更加简单易用,它不可是适用于javaSE环境,也适用于javaEE环境;最重要的是谁简单易懂,且可以快速实现要求,我就用谁!!!html
subject:主体,能够是用户也能够是程序,主体要访问系统,系统须要对主体进行认证、受权。前端
securityManager:安全管理器,主体进行认证和受权都是经过securityManager进行,是shiro的心脏。java
realm:域,领域,至关于数据源,通俗意义的DAO层,经过realm存取认证、受权相关数据。web
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
记住我,用于登陆时记住用户登陆信息。/
Spring Security是一个可以为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组能够在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减小了为企业系统安全控制编写大量重复代码的工做。它是一个轻量级的安全框架,它确保基于Spring的应用程序提供身份验证和受权支持。它与Spring MVC有很好地集成,并配备了流行的安全算法实现捆绑在一块儿。安全主要包括两个操做“认证”与“验证”(有时候也会叫作权限控制)。“认证”是为用户创建一个其声明的角色的过程,这个角色能够一个用户、一个设备或者一个系统。“验证”指的是一个用户在你的应用中可以执行某个操做。在到达受权判断以前,角色已经在身份认证过程当中创建了。
不过我认为Spring Security就是由于Spring而出名,可是它比shiro在使用过程当中相对比较难一些,且它所拥有的功能,大部分Shrio均可以实现。尽管Spring Security对Oauth、OpenID也有支持,Shiro则须要本身手动实现,可是这两个功能现用户与各个产品间单点登陆已经能够经过cookies实现。因此偶力推Shrio,除非是甲方要求(这得重点标注,没办法,甲方有时候才是真理啊!!!)
当用户登陆时,前端将用户输入的用户名、密码信息传输到后台,后台用一个类对象将其封装起来,一般使用的是UsernamePasswordAuthenticationToken这个类。
程序负责验证这个类对象。验证方法是调用Service根据username从数据库中取用户信息到实体类的实例中,比较二者的密码,若是密码正确就成功登录,同时把包含着用户的用户名、密码、所具备的权限等信息的类对象放到SecurityContextHolder(安全上下文容器,相似Session)中去。
用户访问一个资源的时候,首先判断是不是受限资源。若是是的话还要判断当前是否未登陆,没有的话就跳到登陆页面。
若是用户已经登陆,访问一个受限资源的时候,程序要根据url去数据库中取出该资源所对应的全部能够访问的角色,而后拿着当前用户的全部角色一一对比,判断用户是否能够访问。
Shiro比Spring更容易使用,实现和最重要的理解
Spring Security更加知名的惟一缘由是由于品牌名称
“Spring”以简单而闻名,但讽刺的是不少人发现安装Spring Security很难
然而,Spring Security却有更好的社区支持
Apache Shiro在Spring Security处理密码学方面有一个额外的模块
Spring-security 对spring 结合较好,若是项目用的springmvc ,使用起来很方便。可是若是项目中没有用到spring,那就不要考虑它了。
Shiro 功能强大、且 简单、灵活。是Apache 下的项目比较可靠,且不跟任何的框架或者容器绑定,能够独立运行