首页 > 编程知识 正文

有哪些安全框架可以做,shiro实现单点登录流程

时间:2023-05-05 02:05:24 阅读:46810 作者:537

一、Shiro简介

Apache Shiro是Java的安全框架。 使用强大、简单的Java安全框架,为开发人员提供直观、全面的身份验证、授权、加密和会话管理解决方案。

事实上,Shiro的主要功能是支持尽可能多的实施方法,同时管理APP应用程序中与安全相关的所有内容。 Shiro基于完善的接口驱动设计和面向对象的原则,支持多种定制行为。 Shiro提供的缺省实施不是我们一直在努力实现与其他安全框架相同的功能吗! Apache Shiro相当简单。 与Spring Security相比,Spring Security可能不那么强大,但实际工作中不需要那么复杂,因此小而简单的Shiro可能就足够了。 那两个人哪个好,这不用烦恼,要是能更容易地解决项目问题就好了。

二、Shiro可以做什么

用户认证

用户访问控制是否允许访问特定资源,例如是否为用户分配了角色

无论是不是WEB项目,还是没有EJB容器,都可以在任何环境中使用Session API

事件响应(认证中、访问控制中或session生命周期中) ) ) ) ) ) ) ) ) )。

整合多种用户信息数据源

SSO-单点登录

Remember Me,记住

Shiro试图在任何APP应用程序环境中实现这些功能,而不依赖于其他框架、容器或APP应用程序服务器。

三、Shiro的特色

Shiro可以非常容易地开发足够好的APP应用程序,不仅可以用于JavaSE环境,还可以用于JavaEE环境。 Shiro可以帮助您进行身份验证、许可、加密、会话管理、与Web集成、缓存等。 这不是我们想要的。 而且Shiro的API也非常简单; 基本功能如下图所示。

四大基石----身份验证,授权,会话管理,加密

1.Authentication:认证/登录,查看用户是否具有相应的身份;2.Authorization:许可证,即验证权限、验证经过认证的用户是否具有权限; 也就是说,判断用户是否能做点什么。 常见的是验证一个用户是否有角色。 或者,仔细验证用户是否对资源具有权限:3.Session Manager:会话管理,即用户登录时为一个会话,未退出时所有信息都在会话中会话可以是常规的JavaSE环境,也可以是Web环境。4.Cryptography:保护数据安全,包括加密和密码加密,并将其存储在数据库而不是明文存储中

除了以上功能之外,shiro还提供了许多增强功能,包括

Web支持:可轻松集成到Web环境中的Web支持

Caching :缓存,如用户登录后,其用户信息、拥有的角色/权限无需每次查询,可以提高效率;

Concurrency:shiro支持多线程APP应用程序的并发身份验证。 这意味着,如果在一个线程上打开另一个线程,权限将自动传播。

测试:提供测试支持

Run As :允许一个用户假扮另一个用户进行访问;

Remember Me :记住。 这是非常常见的功能。 也就是说,登录一次后,再来就不用登录了。记住一点,Shiro不会去维护用户、维护权限;这些需要我们自己去设计/提供;然后通过相应的接口注入给Shiro即可。

四、主要架构阅览

Shrio体系结构图

Subject )代理既可以表示用户,也可以表示程序。 需要访问系统,系统需要对其进行认证和授权。 可见代理是可以与APP应用程序交互的“用户”。

与Subject对象对应的安全管理,用户请求Url,SecurityManager统一进行Subject的认证和批准。

认证器:认证器主要认证Subject,Subject的信息在shrio中通过认证

ationToken对象来储存,由AuthenricationStrategy进行验证管理.(子)。如果用户觉得Shiro默认的不好,可以自定义实现;其需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了;

  Authorizer:授权器,Subject认证后,由它来对其授予对应角色权限.(子)即控制着用户能访问应用中的哪些功能;

  SessionManager:  Shiro的session管理方式,Shiro提供了一个专门管理session的方式,通常的web程序中的session是HttpSession的对象,是由web容器来管理的.如果写过Servlet就应该知道Session的概念,Session呢需要有人去管理它的生命周期,这个组件就是SessionManager;而Shiro并不仅仅可以用在Web环境,也可以用在如普通的JavaSE环境、EJB等环境;所有呢,Shiro就抽象了一个自己的Session来管理主体与应用之间交互的数据;这样的话,比如我们在Web环境用,刚开始是一台Web服务器;接着又上了台EJB服务器;这时想把两台服务器的会话数据放到一个地方,这个时候就可以实现自己的分布式会话(如把数据放到Memcached服务器);

  SessionDao: session的接口,Shiro通过它来管理session数据,个性化的session数据储存需要使用sessionDao.

  CacheManager:  缓存控制器,主要对session数据和授权数据进行缓存,减小数据库的访问压力.可以通过和ehcache的整合对缓存数据进行管理.

  Pluggable Realms: 可扩展领域,相当于数据源,我们通过上面内容可以大致了解到Shiro的工作原理,但Shiro是怎样得知Subject的信息和数据库的信息是否匹配呢?Shiro这里就提供了一个realms的概念,它的作用就是得到数据库中的信息.这个realm是可以多个并且可以自定义,只需继承AuthorizingRealm这个接口就可以了.可以有1个或多个Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是JDBC实现,也可以是LDAP实现,或者内存实现等等,由用户提供,Shiro不知道你的用户/权限存储在哪及以何种格式存储,所以我们一般在应用中都需要实现自己的Realm密码模块

  注意:对Subject进行认证和授权都需要调用realm,所以realm不仅仅相当于数据源,更加包含了认证和授权的一种逻辑.

  Cryptography:  密码模块,一个密码管理工具,提供了一套加密/解密的组件.比如常用的散列,加/解密等功能,日常练习所使用的md5算法其实是一种散列算法,只能加密,不能解密.


可见Shrio的核心部分还是认证和授权部分,其他都是围绕这俩部分进行的,只需理解了这两部分就可以进行开发了.


五、Shiro认证流程


Shiro处理一个Subject流程图




可以看到:应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是Subject;其每个API的含义:

Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;


SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;


Realm:域,Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。


也就是说对于我们而言,最简单的一个Shiro应用:

1、应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager;

2、我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断。


从以上也可以看出,Shiro不提供维护用户/权限,而是通过Realm让开发人员自己注入。



Shiro处理认证流程图,相当于上图的扩充和细化




可见,Shiro处理流程是一级一级的调用,主要是调用Authentication来进行验证,最后还是需要使用realm来进行身份验证。


六、过滤器权限拦截器

过滤器简称
 对应的java类
anon
org.apache.shiro.web.filter.authc.AnonymousFilter
authc
org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasic
org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
perms
org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
port
org.apache.shiro.web.filter.authz.PortFilter
rest
org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
roles
org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
ssl
org.apache.shiro.web.filter.authz.SslFilter
user
org.apache.shiro.web.filter.authc.UserFilter
logout
org.apache.shiro.web.filter.authc.LogoutFilter


七、JSP shiro标签




八、Shiro相关文章


权限基础
ITeye论坛关于权限控制的讨论
RBAC新解

其他相关文章
Shiro官方文档
Shiro官方推荐资料
Shiro参考手册中文版
幸福的草莓的Shiro 源码分析
Dead_knight的Shiro源码分析Shiro+Struts2+Spring3 加上@RequiresPermissions 后@Autowired失效
简单shiro扩展实现NOT、AND、OR权限验证
集成Shiro后当遇到404错误时会丢失session
在velocity 模板文件中,实现 shiro 权限验证

我的Shiro之旅

九、Shiro项目


1.springside


       springside:是以Spring Framework为核心的,Pragmatic风格的JavaEE应用参考示例,是JavaEE世界中的主流技术选型,最佳实践的总结与演示。

springrain技术详解(1)-shiro基本权限控制
springrain技术详解(2)-权限表结构
springrain技术详解(3)-shiro的filterChainDefinitions
springrain技术详解(4)-shiro的缓存
springrain技术详解(5)-shiro的httpSession


2.spring mvc+spring+mybatis+shiro+easyui整合开发后台用户权限管理系统


3.Spring mvc+apache Shiro+Mybatis开发的一个后台管理系统demo


4.renren-security


一个轻量级权限管理系统,其核心设计目标是开发迅速、学习简单、轻量级、易扩展;使用Spring MVC、Shiro、MyBatis、Bootstrap、Vue2.x等框架,包含:管理员管理、角色管理、菜单管理、定时任务、参数管理、代码生成器等。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。