【shiro】入门程序
来源:互联网 发布:windows 无法引导 编辑:程序博客网 时间:2024/06/02 02:37
Apache Shiro是一个强大的且易用的java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,可以快速,轻松的获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
Shiro是一个开源框架,一个权限管理的框架,在Spring中有Spring security,是一个权限框架,它和Spring依赖过于紧密,虽然功能强大,但是没有shiro简单。shiro实现系统的权限管理,有效提高开发效率,降低开发成本。
♦shiro架构
shiro的核心组件:subject, SecurityManager,Realms.
1、Subject:
当前操作用户,但是在shiro中,不仅仅指人,也可以是第三方进程、后台账户,或其他类似事物。它仅仅意味着当前和软件交互的东西。但大部分情况下指用户。
2、SecurityManager:
它是shiro框架的核心,典型的facade模式,shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
3、Realm:
它充当了shiro与应用安全数据间的桥梁或连接器。也就是说,当对用户执行认证(登陆)和授权(访问控制)验证时,shiro会从应用配置的realm中查找用户及其权限信息。
realm实质上是一个安全安全的dao,它封装了数据源的连接细节,并在需要时将相关数据提供给shiro,当配置shiro时,必须至少指定一个realm,用户认证和授权。
Shiro内置了可以链接大量安全数据源的realm,如LDAP、关系数据库JDBC,类似ini文本的配置资源,以及属性文件等。如果缺省的realm不能满足需求,可以插入代表自定义数据源的自己的realm实现。
4、authenticator:
认证器,主体进行认证最终通过Authticator进行的。
5、authorizer:
授权器,主题进行授权最终通过authorizer。
6、sessionManager:
web应用中一般是用web容器对session进行管理,shiro也提供一套session管理的方式。
7、sessionDao:
通过sessiondao管理session数据。针对个性化的session数据存储需要用到sessionDao.
8、cache Manager:
缓存管理器,主要对session和授权数据进行缓存,比如将授权数据通过cacheManager进行缓存管理,和ehcache整合对缓存数据进行管理。
9、realm :
域,领域,相当于数据源,通过realm存取认证,授权相关数据。在realm中存储授权和认证的逻辑。
10、cryptography:
密码管理,提供了一套加密、解密的组件,方便开发。比如提供常用的散列,加密,解密等功能。
♦入门程序:
业务:验证用户登陆用的账号和密码是否正确。
认证流程:
代码:
1、shiro-first.ini(可以分组)
[users]zhangsan=111lisi=22[users]name=1name2=2
2、代码:
// 用户登陆和退出@Testpublic void testLoginAndLogout() {// 创建securityManager工厂,通过ini配置文件创建securityManager工厂Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini");//创建SecurityManagerSecurityManager securityManager = factory.getInstance();//将securityManager设置当前的运行环境中SecurityUtils.setSecurityManager(securityManager);//从SecurityUtils里边创建一个subjectSubject subject = SecurityUtils.getSubject();//在认证提交前准备token(令牌)UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111");try {//执行认证提交subject.login(token);} catch (AuthenticationException e) {// TODO Auto-generated catch blocke.printStackTrace();}//是否认证通过boolean isAuthenticated = subject.isAuthenticated();System.out.println("是否认证通过:" + isAuthenticated);//退出操作subject.logout();//是否认证通过isAuthenticated = subject.isAuthenticated();System.out.println("是否认证通过:" + isAuthenticated);}
小结:
这篇博客先站在巨人的肩膀上吧。感谢教程!
- shiro认证入门程序
- shiro授权入门程序
- Shiro入门程序
- shiro授权入门程序
- 【shiro】入门程序
- Shiro 学习记录 Shiro 入门程序
- shiro入门级小程序
- shiro学习(一)---认证入门程序
- shiro学习(二)---授权入门程序
- shiro入门
- shiro入门
- Shiro入门
- shiro入门
- shiro入门
- Shiro 入门
- Shiro 入门
- Shiro 入门
- Shiro 入门
- Android 机型适配-图片或者视频保存到相册立即显示问题
- 机器学习与数据挖掘中的十大经典算法
- 关于kafka Consumer参数:exclude.internal.topics
- 2017.12.11———2017.12.17周总结
- mysql如何在命令行创建数据库
- 【shiro】入门程序
- Linux常用命令
- 数据结构与算法--栈、队列(队列)
- Python之路【第十五篇】:Web框架
- ScrollView中滑动控件
- 程序员如何转型项目经理?
- jQuery,JQ显示与隐藏
- Python之路【第十六篇】:Django【基础篇】
- Python输出当前时间