apache shiro

考虑到JAVA已有10多年的历史了,需要在其应用程序中内置身份验证和授权的应用程序开发人员的选择数量之低令人震惊。

在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应用程序,该应用程序执行一些身份验证和授权。 对于本教程,您将需要:

  1. 阿帕克史郎
  2. 一个Java开发环境。 我使用Eclipse。 但是您也可以使用其他IDE或命令行工具。
  3. 您可以从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:简化应用程序安全性相关推荐

  1. Apache Shiro:简化应用程序安全性

    考虑到JAVA已有10多年的历史了,对于需要在其应用程序中内置身份验证和授权的应用程序开发人员来说,选择的数量非常少. 在JAVA和J2EE中,JAAS规范是一种尝试解决安全性的问题. 尽管JAAS用 ...

  2. apache shiro_Apache Shiro第1部分–基础

    apache shiro Apache Shiro (最初称为JSecurity)是Java安全框架. 它被接受并于2010年成为Apache顶级项目.它的目标是功能强大且易于使用. 该项目正在积极开 ...

  3. apache shiro_Apache Shiro第3部分–密码学

    apache shiro 除了保护网页和管理访问权限外, Apache Shiro还执行基本的加密任务. 该框架能够: 加密和解密数据, 哈希数据, 生成随机数. Shiro没有实现任何加密算法. 所 ...

  4. apache shiro_Apache Shiro第2部分–领域,数据库和PGP证书

    apache shiro 这是致力于Apache Shiro的系列文章的第二部分. 我们从简单的不安全Web应用程序开始了上一部分 . 完成后,该应用程序具有基本的身份验证和授权. 用户可以登录和注销 ...

  5. Shiro框架:授权流程、授权方式、Shiro授权入门程序、自定义Realm进行授权

    一.Shiro授权: 1.授权与权限: (1)授权:访问控制,必须具有该资源的访问权限才可以访问该资源. (2)权限模型:标准权限数据模型包括 :用户.角色.权限(包括资源和权限).用户角色关系.角色 ...

  6. Windows Azure 安全最佳实践 - 第 6 部分:Azure 服务如何扩展应用程序安全性

    多种 Windows Azure服务可以帮助您将应用程序安全性扩展到云. 有三种服务可提供多个提供程序之间的身份标识映射.内部部署数据中心间的连接和相互发送消息的应用程序功能(无论应用程序位于何处). ...

  7. 如何使用json开发web_如何通过使用JSON Web令牌简化应用程序的身份验证

    如何使用json开发web by Sudheesh Shetty 由Sudheesh Shetty 如何通过使用JSON Web令牌简化应用程序的身份验证 (How to simplify your ...

  8. SolarWinds 升级 APM Suite,简化应用程序和基础架构管理!

    2020 年 6 月 12 日 – IT管理软件供应商SolarWinds (NYSE:SWI) 宣布,其旗下的 IT网络安全解决方案组合产品SolarWinds® APM Suite将带来新增和改进 ...

  9. 【效率技巧】利用TI计算器的程序映射功能 kbdprgm1()~9() 简化GTC程序调试操作

    2019独角兽企业重金招聘Python工程师标准>>> [效率技巧]利用TI计算器的程序映射功能 kbdprgm1()~9() 简化GTC程序调试操作 GTC编译.链接成功的程序,默 ...

最新文章

  1. Win10家庭版如何启用本地组策略
  2. Mac 从Makefile 编译 Rocksdb 源码的一些注意事项
  3. 部门内 IDEA 分享,超实用技巧!
  4. 中国无人车公司AutoX,打响加州RoboTaxi服务第一枪
  5. WinCE6.0的批量编译
  6. 我的CSDN_Blog激活啦~~
  7. Linux学习笔记第八周七次课(4月3日)
  8. 前端开发学java_Java前端开发需要学习什么
  9. BXP的PNP的新做法(转)
  10. 自动化专业是计算机相关专业吗,自动化专业属于什么学科门类
  11. [PHP]全国省市区信息,mysql数据库记录
  12. 2022-2028全球与中国电动气动转换器市场现状及未来发展趋势
  13. 互联网经济催生了一些新职业,带来新机遇!
  14. Padavan挂载SMB共享及编译ffmpeg
  15. 每周分享第 25 期
  16. 苹果支付(内购项目)回调验证
  17. 第十二章 软件壳(三)(动态加载型壳)
  18. Mansory之一 :mas_equalTo和equalTo区别与使用
  19. [jzoj4210] 【五校联考1day1】我才不是萝莉控呢 {哈夫曼树}
  20. 山东大学软件学院2019web数据管理

热门文章

  1. 什么时候才能都及格呢?
  2. 《走遍中国》珍藏版(十二)
  3. 2016蓝桥杯省赛---java---B---6(方格填数)
  4. 16-就业课(2.1)-应用容器-Docker
  5. android:background大小,小Demo小知识-android:foreground与android:background
  6. java中抽象类继承抽象类_用Java中的抽象类扩展抽象类
  7. 编写脚本电脑怎么编写界面_在任何无法理解的情况下,请编写脚本
  8. spicy命令_Spicy Spring:动态创建自己的BeanDefinition
  9. apache.camel_使用Apache Camel 2.14的轻松REST端点
  10. Java并行编程中的“可调用”与“可运行”任务