绍兴市住房和城乡建设局网站,找个专门做各种外卖的网站,局域网如何做网站,深圳建网站哪个济南兴田德润有活动吗考虑到JAVA已有10多年的历史了#xff0c;对于需要在其应用程序中内置身份验证和授权的应用程序开发人员来说#xff0c;选择的数量非常少。 在JAVA和J2EE中#xff0c;JAAS规范是一种尝试解决安全性的问题。 尽管JAAS用于身份验证#xff0c;但授权部分却过于繁琐而无法使… 考虑到JAVA已有10多年的历史了对于需要在其应用程序中内置身份验证和授权的应用程序开发人员来说选择的数量非常少。 在JAVA和J2EE中JAAS规范是一种尝试解决安全性的问题。 尽管JAAS用于身份验证但授权部分却过于繁琐而无法使用。 EJB和Servlet规范在方法和资源级别提供了粗粒度的授权。 但是这些太粗糙了无法在实际应用中使用。 对于Spring用户Spring Security是替代方法。 但是使用起来有点复杂尤其是授权模型。 大多数应用程序最终都会构建用于身份验证和授权的本地解决方案。 Apache Shiro是解决此问题的开源JAVA安全框架。 它是一个优雅的框架可让您轻松地向应用程序添加身份验证授权和会话管理。 Shiro的亮点是 它是一个纯Java框架。 它可以与各种JAVA应用程序一起使用J2SEJ2EEWeb独立或分布式。 它可以轻松地与各种存储库集成这些存储库可以承载用户和权限元数据例如RDBMLDAP。 它具有一个简单直观的权限模型可以应用于各种问题领域。 它是一个模型可让您专注于问题域而不会陷入框架中。 它内置了对会话管理的支持。 它内置了对缓存元数据的支持。 它非常容易与Spring集成。 同样适用于任何J2EE应用程序服务器。 最重要的是它非常易于使用。 大多数时候集成Shiro所需要做的就是实现将Shiro与用户和权限元数据联系起来的REALM。 Shiro概念 SecurityManager封装了使用Shiro的应用程序的安全配置。 主题是正在使用系统的用户的运行时视图。 创建主题时不会对其进行身份验证。 对于身份验证必须调用login方法并传递适当的凭据。 会话表示与已验证主题关联的会话。 会话具有会话ID。 应用程序可以在会话中存储任意数据。 该会话有效直到用户注销或会话超时。 权限表示主题可以对应用程序中的资源执行的操作。 开箱即用Shiro支持用冒号分隔的令牌表示的权限。 每个标记都有一些逻辑含义。 例如我的应用程序可以将权限定义为ResourceTypeactionsResourceInstance。 更具体地说Filereadcontacts.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