第五章 精确的访问控制
到目前为止,我们已经为JBCP Pets站点添加了用户友好的一些功能,包括自定义的登录页以及修改密码、remember me功能。
在本章中,我们将要学习规划应用安全的技术以及用户/组的划分。其次,我们学习两种实现精确访问控制的实现方式——这会影响应用中页面的授权。然后,我们会了解Spring Security如何通过使用方法注解和AOP的方式来实现业务层安全。最后,我们将会了解通过基于注解的配置实现按照角色过滤集合数据这一比较有趣的功能。
在本章中,我们会学到:
l 规划web应用安全的基本技术和组管理,这会使用到现成的工具和批判思考(critical thinking);
l 基于用户请求的上下文,配置和实验在页面级别进行授权检查以显示内容的不同方式;
l 通过配置和代码注解pre-authorization的方式使得调用应用中关键部分是安全的;
l 几种实现方法级别安全的可选方式,并介绍各种方式的优劣;
l 通过使用方法级别的注解,实现基于Collections和Arrays数据的过滤器。
因为本章涉及到的概念超过了前面的一些孤立技术点,为了扩大站点的范围在源代码上做了一定数量的修改,并将其分成了真正三层的系统。你可能对这些变化感兴趣,但是它们与Spring Security没有直接的关系,所以我们将会忽略这些修改的细节。当你发现本章的源代码总添加了许多的文件,不要被吓倒。
重新思考应用功能和安全
现在,我们要再看一下JBCP
Pets应用的授权模型和流程。我们感觉已经得到了一个很安全的应用,但是应用的流程并不特别适合与公开的电子商务站点。我们还需要做很多的事情,因为对应用中每个页面(除去登录界面)的请求,都需要用户有一个合法的账号并登录——这无助于用户的浏览和购买。
规划应用安全
通常情况下,需要产品管理领域的人员和安全专员联合工程师来评估用户社区和需求的功能。规划过程——如果能够高效执行——使用工作表和图表来彻底分析应用包含的角色和组。我们会花一点时间简单介绍对JBCP Pets的扩展功能来阐明这个过程是如何进行的。在任何项目中对安全规划的思考过程将会对开发过程很有好处——尝试对你应用中的每个页面和业务服务构建安全状况。
规划用户角色
对于JBCP Pets,我们将会使用下边的表格匹配用户分类到角色(Spring Security的GrantedAuthority值)中。它们中有一些是新的角色,用来对用户进行不同的分类。
用户分类
|
描述
|
角色
|
Guest
|
不是记住或认证过的用户
|
None (anonymous)
|
Consumer / Customer
|
用户已经建立的账号,在站点上可能已完成也可能未完成购买交易
|
ROLE_CUSTOMER
ROLE_USER
|
Customer w/
Completed Purchase
|
用户至少在站点上完成了一笔交易
|
ROLE_PURCHASER
ROLE_USER
|
Administrator
|
负责用户账号管理等功能的管理员
|
ROLE_ADMIN
ROLE_USER
|
Supplier
|
产品供货商,允许管理其产品目录
|
ROLE_SUPPLIER
ROLE_USER
|
使用这些声明的用户分类和角色,我们能够将角色粗略得匹配到站点的功能设计上。有很多方式能够完成这项任务——以下是我们在过去发现很有用的办法:
l 使用Microsoft
Visio和韦恩图来标示功能和用户组的重叠交叉(我们在第二章:Spring Security起步中曾经使用过其很有限的功能)。这种技术对小型的应用和粗略的分析能够非常直观。
l 个性化的图表页面,并注明能够访问每个页面的用户分类和角色。尽管不能直接可视化的访问,但这种方式能够非常精确。我们将会在下面的章节阐述一个这样的例子。
l 使用便条和白板或草图板建模。在这种类型的练习中,产品的规划人员在白板上勾画出一些区域来代表不同的用户角色,并在白板的每个区域上添加便签以代表产品功能。
通常来说,使用非数字的方式进行安全的初期规划是很容易的,因为经常见到组内讨论会产生对安全功能的较大修正,而使用非数字的工具很容易进行调整。典型情况下,这种层次的安全规划不会涉及到单个页面的和页面中某些部分的层次,而是应用中的功能“块”(即应用整体上的安全功能规划——译者注)。
规划页面级权限
下一层次的安全规划就是页面级元素的安全。首先,规划整个站点范围的页面特性是很重要的,这能够保证用户在使用可见功能并切换页面时,保证界面的一致性。大多数的站点已经有了整个站点层次的模板功能,最简单的就是jsp:include指令(正如我们在JBCP Pets中使用的),或者更复杂的,如Apache Tiles 2。
页面级别的安全规划通常与站点的用户体验规划结合起来——很多公司使用Microsoft Visio或者Adobe Dreamweaver进行站点的低保真设计,或者使用更复杂的工具如Axure RP。不管使用什么工具,需要保证的是在规划安全相关的功能时要与站点的最初设计功能相融合。你的UI设计师或界面设计师可能会愿意讨论基于用户的角色,那些元素会显示或不显示。理解页面元素的可能选项能够使得好的UI规划人员设计出合理灵活的布局,从而保证不管用户是什么样的权限,页面都能展现得很好。
【使用正确的工作工具。我有一个UI设计师朋友,他为Visio做了很棒的形状集合,这使我产生了很大的兴趣,这些通过http://www.guuui.com/issues/02_07.ph
可以得到。对于熟悉Visio的人来说,这是一种不错的方式来开发精确、低保真的模型,对于这个工具许多人已经很了解。尽管现在没有兼容Visio的开源产品,类似的应用如Dia (http://projects.gnome.org/dia/)或OpenOffice
Draw (http://www.openoffice.org/product/draw.html)对大多数的平台都是支持的。】
一个注明了安全信息的Visio图可能会如下所示:
可以看到我们并不需要很多安全相关信息的细节,但是这个图所表达的意思对于查看的每个人(即使不是技术人员)都很容易理解。
- 大小: 40.8 KB
分享到:
相关推荐
Spring Security3是Spring框架中的一个模块,它提供了全面的安全服务,旨在为Web和非Web应用程序提供访问控制、认证、授权等功能。Spring Security3通过其强大的配置能力和丰富的特性,帮助开发者构建安全的应用程序...
Spring Security 3.0.1 作为一次 bug 修复版本,虽然没有添加新功能,但通过修正已知问题提高了系统的稳定性和安全性。通过上述知识点的介绍,我们了解了 Spring Security 的核心概念、配置方式以及一些高级特性,这...
《Spring Security3》第二章第三部分的翻译下篇主要涵盖了Spring Security的核心概念和技术,这部分内容是深入理解Spring Security架构和实现安全控制的关键。在本章节中,我们将详细探讨以下几个核心知识点: 1. *...
Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户身份的验证,以确保用户的...
在Spring Security 3版本中,这个框架进一步完善了其特性和性能,使其成为开发者构建安全应用的首选工具。下面将详细探讨Spring Security 3中的关键知识点。 1. **核心组件**: - **Filter Chain**: Spring ...
Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的安全服务。这个框架能够处理认证、授权以及各种安全相关的功能,帮助开发者构建安全、可扩展的应用。以下...
教程文档则可能深入到实践操作,包括如何配置Spring Security、创建第一个安全应用、调试和测试安全设置,以及如何解决常见问题。通过学习这套文档和教程,开发者可以掌握Spring Security的核心原理,从而为自己的...
《Spring Security3》第四章第四部分主要探讨了Remember me服务的后台存储机制以及如何结合SSL(Secure Sockets Layer)来增强应用的安全性。这一部分的知识点涵盖了Spring Security中Remember me的功能,用户身份...
总之,Spring Security是Java开发者在构建安全应用程序时的重要工具,其强大的功能和灵活性使其成为企业级应用的理想选择。无论你是初学者还是经验丰富的开发者,官方文档都是学习和掌握Spring Security不可或缺的...
在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...
#### 第一章:一个不安全应用的剖析 **安全审计** - **目的**:识别系统中的安全隐患,并评估安全措施的有效性。 - **过程**:通过模拟攻击来测试系统的安全性,分析日志记录,评估现有安全策略。 **样例应用简介*...
Spring Security 是一个强大的和高度可定制的身份验证和...总的来说,Spring Security 3.x第五章的实例将帮助开发者深入理解这个框架的使用,通过具体的代码示例来实践安全性配置,从而更好地保护他们的Spring应用。
SpringSecurity是Java领域中一款强大的安全框架,主要用于Web应用程序的安全管理。它提供了全面的身份验证、授权、会话管理以及安全相关的功能,可以帮助开发者构建安全的Web应用。在本笔记中,我们将深入探讨Spring...
Spring Security 是一个强大的安全框架,主要用于Java Web应用的安全管理,包括认证、授权和访问控制等核心功能。在“spring security第一个项目”中,我们将探讨如何搭建一个基础的Spring Security环境,实现用户...
本篇将深入探讨Spring Security 3.x的核心概念和主要功能,帮助你快速理解和应用到企业级项目中。 1. **核心概念** - **认证(Authentication)**:Spring Security提供了多种认证机制,如基于表单的身份验证、...
第一章:一个不安全应用的剖析 第二章:springsecurity起步 第三章:增强用户体验 第四章:凭证安全存储 第五章:精确的访问控制 第六章:高级配置和扩展 第七章:访问控制列表(ACL) 第八章:对OpenID开放 第九章...
- 学习 Spring Security 的第一步通常是创建一个简单的 "Hello World" 应用,这通常涉及添加必要的依赖和配置,以便启动基础的安全功能。 3. **单元测试**: - 在安全相关的开发中,单元测试是必不可少的,因为它...
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...