基于Spring Securityweb应用安全控制研究与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Spring Security的web应用安全控制研究与实现
摘要:针对web应用安全控制问题,提出了一种基于spring security开源的安全框架的解决方案,分别从web应用中的用户认证和授权两个方面实现对web应用安全的控制,从而提高web应用的安全性。
关键词:web应用 spring security 安全访问控制
0 引言
web应用作为一种开放式的服务平台,其无时无刻不在面临非法访问者的访问或者攻击,同时也面临内部用户的非法操作,使得存储在web应用中的数据时刻可能被窃取和破坏的危险。这就需要我们提供一定的安全控制规则来确保web应用的安全。然而在系统实施web应用安全控制的时候,主要有:基于web容器的安全认证。基于第三方插件的安全认证。独立开发的安全认证。对于第一种方式,它是传统的安全认证方式,对具体的web服务器依赖强,移植代价高。对于第二种方式,不依赖具体的web服务器,灵活性强,但受自身功能限制,因此,插件选取很关键。对于第三种方式,其将代码耦合到相应的业务逻辑中,增加维护的难度,降低了开发效率,不便调试。从灵活性、易用性、功能和投入等方面考虑,第二种方式是一种比较理想的方式。如在j2ee平台比较流行的开源框架spring security,其提供了描述性安全访问控制解决方案。本文通过对spring security安全框架的工作原理进行简单的剖析并展示如何将spring security安全框架应用到我们具体的web应用
中。
1 spring security简介
如引言所阐述的,web应用的安全控制主要包括外部和内部两个方面。在安全控制的时候需要从以下几个方面考虑:能够认证合法的用户、能够对web 请求进行安全保护、能够对业务层面的方法进行安全保护、能够做到对实体级别的保护等四个方面,而这四方面概括起来则分为两部分用户认证和用户授权。用户认证是指证某个用户是否为系统中的合法主体,即用户是否能够访问该web应用,用户认证一般通过验证用户名和密码来完成认证。用户授权指的是验证用户在访问过程中是否有权限执行某个操作。
spring是一款轻量级的开源框架,采用java语言实现的[1]。spring security是基于spring的安全框架,其充分运用了spring 中的依赖注入(di,dependency injection)和面向切面(aop ,aspect oriented programming)技术,使得开发者可以通过xml
配置文件以无侵入式的方式快速的将其部署到已有或者新的web应用中。它提供了认证、授权、访问控制、会话管理等多种功能,用于加强任何java应用的安全,但最常用于基于web的应用。在web 安全控制的两个部分,spring security分别提供了多种实现方式。在用户认证部分,spring security提供了包括http基本认证、http 表单认证、http摘要认证、openid和ldap等主流的认证方式。在用户授权部分,spring security提供了基于角色的访问控制和访问控制列表(access control list,acl),可以实现领域对象的
细粒度控制[2]。
1.1 spring security原理
spring security 框架的主要组成部分是:安全代理、认证管理、访问决策管理、运行身份管理和调用后管理等[3]。其对访问对象的整体控制流程框架如图1所示:
图1 spring security访问控制流程框架
(1)安全代理
安全代理的主要作用是拦截所用用户的请求,并协调其他安全管理器实现安全控制。它的配置方式是在web.xml中配置delegatingfilterproxy实例,delegatingfilterproxy负责的是将http请求委派给实现java.util.logging.filter接口的spring bean。
(2)认证管理
确定用户的身份和凭证。其配置是在spring security提供的xml 标签中配置,为认证配置相应的认证方式,同时在配置中为认证方式配置认证的凭证。
(3)访问控制决策管理
关于是否允许用户访问应用中的一个资源做决策。它的工作原理是通过访问控制决策管理器中的投票者对访问控制决策投票,投票者可以投票赞成授权、弃权或者拒绝访问资源。
(4)运行时身份管理
确人当前的主体和凭证的授权在保护资源的权限变化适应。
(5)调用后管理
确认主体和凭证的权限是否被允许查看保护的资源返回的数据。
2 spring security在应用中的部署和环境的设置
如spring security的简介所述,spring security是基于spring 的安全框架,所以在部署spring security之前一定要确保spring 框架环境已经设置好以及spring security的jar已经部署到lib 中。
2.1 在web.xml中配置安全代理:
springsecurityfilterchain
org.springframework.web.filter.delegatingfilterproxy
springsecurityfilterchain
/*
同时为spring security安全控制指定其配置文件,虽然我们可以将web和服务层配置以及安全配置文件配置到同一个配置文件中,但是将安全配置分离到一个单独的文件(如
spring-security.xml)做法更好,易于维护[2]。在web.xml中指定安全配置文件位置,让contextloaderlister在启动时加载该文件。
...
/web-inf/spring-security.xml
2.2 认证管理的配置
2.2.1http安全配置
这里我们为认证管理配置了基于表单的认证方式,其中
login-page、defaulet-target-url和
authentication-failure-url这三个属性分别指定了默认的登入界面、登陆成功跳转的页面和登陆失败后跳转的页面,其中login.jsp必须使用spring security专有的表单操作url和输入字段名称,当然也可以不用配置这三个属性,因为spring security 已经默认为我们提供了,这也就是为什么login.jsp中必须包含spring security专有的表单操作url和输入字段名称。这里我们也可以配置其他的认证方式如http基本验证,其和表单认证同时启用时会采用后者。atuo-config=“true”表示自动配置典型的web应用安全需要的基本安全服务,如intercept-url,将访问属性与用户的权限比较,确定用户可以访问相应的url。