Apache Shiro:简化应用程序安全性
在JAVA和J2EE中,JAAS规范是一种尝试解决安全性的问题。 尽管JAAS用于身份验证,但授权部分却过于繁琐而无法使用。 EJB和Servlet规范在方法和资源级别提供了粗粒度的授权。 但是这些太粗糙了,无法在实际应用中使用。 对于Spring用户,Spring Security是替代方法。 但是使用起来有点复杂,尤其是授权模型。 大多数应用程序最终都会构建用于身份验证和授权的本地解决方案。
Apache Shiro是解决此问题的开源JAVA安全框架。 它是一个优雅的框架,可让您轻松地向应用程序添加身份验证,授权和会话管理。
Shiro的亮点是:
它是一个纯Java框架。 它可以与各种JAVA应用程序一起使用:J2SE,J2EE,Web,独立或分布式。
它可以轻松地与各种存储库集成,这些存储库可以承载用户和权限元数据,例如RDBM,LDAP。
它具有一个简单直观的权限模型,可以应用于各种问题领域。 它是一个模型,可让您专注于问题域,而不会陷入框架中。
它内置了对会话管理的支持。
它内置了对缓存元数据的支持。
它非常容易与Spring集成。 同样适用于任何J2EE应用程序服务器。
最重要的是,它非常易于使用。 大多数时候,集成Shiro所需要做的就是实现将Shiro与用户和权限元数据联系起来的REALM。
Shiro概念
SecurityManager封装了使用Shiro的应用程序的安全配置。
主题是正在使用系统的用户的运行时视图。 创建主题时,不会对其进行身份验证。 对于身份验证,必须调用login方法,并传递适当的凭据。
会话表示与已验证主题关联的会话。 会话具有会话ID。 应用程序可以在会话中存储任意数据。 该会话有效,直到用户注销或会话超时。
权限表示主题可以对应用程序中的资源执行的操作。 开箱即用Shiro支持用冒号分隔的令牌表示的权限。 每个标记都有一些逻辑含义。 例如,我的应用程序可以将权限定义为ResourceType:actions:ResourceInstance。 更具体地说,File:read:contacts.doc表示读取文件contact.doc的权限。 该权限必须与用户关联,才能将该权限授予该用户。
角色是权限的集合,这些权限可能表示执行某些组织功能的能力。 角色使用户和权限之间的关联更易于管理。
领域为Shiro提取用户,权限和角色元数据。 通过实现领域并将其插入Shiro,可以使此数据可用于Shiro。 典型的领域使用关系数据库或LDAP来存储用户数据。
讲解
让我们构建一个简单的java应用程序,该应用程序执行一些身份验证和授权。 对于本教程,您将需要:
- 阿帕克史郎
- 一个Java开发环境。 我使用Eclipse。 但是您也可以使用其他IDE或命令行工具。
- 您可以从simpleshiro.zip下载此示例的源代码。
步骤1:创建Shiro.ini配置文件
我们将使用Shiro随附的默认文件库领域。 这将从shiro.ini文件中读取用户/权限元数据。 在随后的教程中,我将展示如何构建一个从关系数据库获取数据的领域。
在Ini文件中,让我们定义一些用户并将一些角色与其关联。
# Simple shiro.ini file
[users]
# user admin with password 123456 and role Administrator
admin = 123456, Administrator
# user mike with password abcdef and role Reader
mike = abcdef, Reader
# user joe with password !23abC2 and role Writer
joe = !23abC2, Writer
# -----------------------------------------------------------------------------
# Roles with assigned permissions
[roles]
# A permission is modeled as Resourcetype:actions:resourceinstances
# Administrator has permission to do all actions on all resources
Administrator = *:*:*
# Reader has permission to read all files
Reader = File:read:*
# Writer role has permission to read and write all files
Writer = File:read,write:*
在上面的shiro.ini中,我们定义了3个用户和3个角色。 权限建模
作为冒号分隔的标记。 每个令牌可以具有多个逗号分隔的部分。 每个域和部分都授予对某个特定于应用程序的域的权限。
步骤2:将BootStrap shiro插入您的应用程序
Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
IniSecurityManagerFactory从shiro.ini加载配置,并为该应用程序创建单例SecurityManager。 为简单起见,我们的shiro.ini使用默认的SecurityManager配置,该配置使用基于文本的领域,并从shiro.ini文件获取用户,权限和角色元数据。
步骤3:登入
Subject usr = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("mike", "abcdef");
try {usr.login(token);
}
catch (AuthenticationException ae) {log.error(ae.toString()) ;return ;
}
log.info("User [" + usr.getPrincipal() + "] logged in successfully.");
SecurityUtils是一种工厂类,用于获取现有主题或创建新主题。 使用AuthenticationToken传递凭据。 在这种情况下,我们要传递用户名和密码,并因此使用UsernamePasswordToken。 然后,我们在传入身份验证令牌的主题上调用登录方法。
步骤4:检查使用者是否有权限
if (usr.isPermitted("File:write:xyz.doc")) {log.info(usr.getPrincipal() + " has permission to write xyz.doc ");
} else {log.info(usr.getPrincipal() + " does not have permission to write xyz.doc ");
}
if (usr.isPermitted("File:read:xyz.doc")) {log.info(usr.getPrincipal() + " has permission to read xyz.doc ");
} else {log.info(usr.getPrincipal() + " does not have permission to read xyz.doc ");
}
主题有一个isPermitted方法,该方法将一个权限字符串作为参数并返回true / false。
步骤5:登出
usr.logout();
注销方法将用户注销。
要熟悉Shiro,请尝试更改UsernamePasswordToken并以其他用户身份登录。 检查其他权限。 修改Shiro.ini文件以创建具有不同权限的新用户和角色。 使用不同的元数据和不同的输入多次运行该程序。
在生产环境中,您不需要ini文件中的用户和角色。 您希望它们位于关系数据库或LDAP之类的安全存储库中。 在下一部分中,我将向您展示如何构建可以使用关系数据库中的用户,角色,权限元数据的Shiro领域。
参考: Apache Shiro:我们的JCG合作伙伴 Manoj在The Khangaonkar Report博客上简化了 应用程序安全性
相关文章:
- 任何软件开发公司应存在的服务,实践和工具,第2部分
- 使用Spring Security保护GWT应用程序
- Java EE中的配置管理
- 2011年排名前25位的最危险软件错误
- Spring MVC拦截器示例
- Java中的Google ClientLogin实用程序
翻译自: https://www.javacodegeeks.com/2011/10/apache-shiro-application-security-made.html
Apache Shiro:简化应用程序安全性相关推荐
- apache shiro_Apache Shiro:简化应用程序安全性
apache shiro 考虑到JAVA已有10多年的历史了,需要在其应用程序中内置身份验证和授权的应用程序开发人员的选择数量之低令人震惊. 在JAVA和J2EE中,JAAS规范是一种尝试解决安全性的 ...
- Apache shiro介绍
原文链接Application Security With Apache Shiro(翻译) 前面自己自己配合谷歌翻译,后面大部分谷歌翻译. 当你尝试保护你的程序时候你会被困扰吗?你会觉得现有的jav ...
- 轻量又高效,Apache Shiro 你值得拥有!
Apache Shiro 是一个强大且易用的 Java 安全框架,能够让开发者以非常清晰的方式处理身份认证.授权.会话管理以及密码加密.使用其易于理解的 API,开发者可以轻松,高效的为任何应用程序, ...
- 文件用户Apache shiro学习笔记+ spring整合shiro (一)
改章节朋友在青岛游玩的时候突然想到的...这两天就有想写几篇关于文件用户的博客,所以回家到之后就奋笔疾书的写出来发表了 Apache Shiro官网:http://shiro.apache.org/ ...
- Spring Security 和 Apache Shiro
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 前言 web应用达到生产需要就必须有安全控制.java web领域经常提及的两大开源框架主要 ...
- Apache Shiro第3部分–密码学
除了保护网页和管理访问权限外, Apache Shiro还执行基本的加密任务. 该框架能够: 加密和解密数据, 哈希数据, 生成随机数. Shiro没有实现任何加密算法. 所有计算都委托给Java密码 ...
- Apache Shiro第1部分–基础
Apache Shiro (最初称为JSecurity)是Java安全框架. 它被接受并于2010年成为Apache顶级项目.它的目标是功能强大且易于使用. 该项目正在积极开发中,用户和开发人员的邮件 ...
- Apache Shiro入门
Apache Shiro入门 @(Shiro)[shiro,安全框架] Apache Shiro入门 Apache Shiro基本概述 Apache Shiro基本概念 使用Shiro能做什么 Shi ...
- Shiro学习总结(1)——Apache Shiro简介
1.1 简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比springSecurity,可能没有Spring Securit ...
最新文章
- 残差复合正态分布的重要性
- matlab--矩阵运算
- iPhone开发教程之Core Data 常见问题的总结
- NYOJ 496 巡回赛 拓扑排序
- 基于token与基于服务器的身份认证
- python get方法请求参数_如何解决TypeError get()在使用get方法的Python请求中恰好接受2个参数(给定3个)...
- 开课啦 dubbo-go 微服务升级实战
- java如何解析cron成可视化_宅家30天,2万字节java高级工程师面试题解析,如何斩获阿里p7...
- 在兼职的情况下,有什么办法可以在年底之前挣5000到一万块?
- es支持的操作及性能
- Nginx安装问题记录
- 电力工程项目管理系统
- 巧用“百度指数”,让软文推广效果最大化
- 计算机主题绘画能画什么,电脑绘画活动方案
- web前端入门到实战:简单的图片轮播
- 这篇文章来自我的微信朋友圈,并不特别好玩,但可以给创业者补点财务知识
- 常见即时通讯:网易IM 、腾讯IM、环信IM、融云IM、leancloud IM介绍
- 【PS】61款中国风古典背景水墨山水古风韵味PSD分层设计素材
- java 集成 atlas
- layui标签页切换并自动刷新
热门文章
- 会话技术Cookie
- ogm neo4j_Neo4J OGM与Quarkus
- 堆栈溢出 java_堆栈溢出回答了我们所不知道的Java首要问题
- java登录界面命令_Java命令行界面(第12部分):CLAJR
- 航空订票系统界面java_Java命令行界面(第21部分):航空公司2
- 冷热复位_冷热rx-java可观察
- eclipse扩展点_Eclipse扩展点评估变得容易
- 使用Open Liberty的开发模式最大程度地缩短周转时间
- Spring Security with Spring Boot 2.0:使用Servlet堆栈的简单身份验证
- Shebang来Java了吗?