以前叫做spring的acegi安全框架,现在重新标识为spring security 2.0,它实现了简易配置的承诺,提高了开发者的生产力。它已经是java平台上应用最广的安全框架了,在sourceforge上拥有250,000的下载量,Spring Security 2.0又提供了一系列的新功能。
专注于为中小企业提供网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业平陆免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
Spring Security是什么
Spring Security是目前用于替换acegi的框架,它提供了一系列新的功能。
◆大为简化了配置
◆继承OpenID,标准单点登录
◆支持windows NTLM,在windows合作网络上实现单点登录
◆支持JSR 250("EJB 3")的安全注解
◆支持AspectJ切点表达式语言
◆全面支持REST Web请求授权
◆长期要求的支持组,层级角色和用户管理API
◆提升了功能,使用后台数据库的remember-me实现
◆通过spring webflow 2.0对web状态和流转授权进行新的支持
◆通过Spring Web Services 1.5加强对WSS(原来的WS-Security)的支持
◆整个更多的……
目标
目前,我工作在一个spring的web应用上,使用acegi控制对资源的访问权限。用户信息保存在数据库中,我们配置acegi使用了基于JDBC的UserDetails服务。同样的,我们所有的web资源都保存在数据库里,acegi配置成使用自定义的 AbstractFilterInvocationDefinitionSource,对每个请求检测授权细节。
随着Spring Security 2.0的发布,我想看看是不是可以替换acegi,但还要保持当前的功能,使用数据库作为我们验证和授权的数据源,而不是xml配置文件(大多数演示程序里使用的都是xml)。
这里是我采取的步骤……
步骤
1.第一步(也是最重要的)是下载新的Spring Security 2.0框架,并确保jar文件放到正确的位置(/WEB-INF/lib/)。
Spring Security 2.0下载包里包含22个jar文件。我不需要把它们全用上(尤其是那些sources包)。在这次练习中我仅仅包含了以下几个:
◆spring-security-acl-2.0.0.jar
◆spring-security-core-2.0.0.jar
◆spring-security-core-tiger-2.0.0.jar
◆spring-security-taglibs-2.0.0.jar
2.在web.xml文件里配置一个DelegatingFilterProxy
3.Spring Security 2.0的配置比acegi简单太多了,所以我没有在以前acegi配置文件的基础上进行修改,我发现从一个空白文件开始更简单。如果你想修改你以前的配置文件,我确定你删除的行数比添加的行数还要多。配置文件的第一部分是指定安全资源过滤器的细节,这让安全资源可以通过数据库读取,而不是在配置文件里保存信息。这里是一个你将在大多数例子中看到的代码。
使用这些内容进行替换:
这段配置的主要部分secureResourceFilter,这是一个实现了FilterInvocationDefinitionSource 的类,它在Spring Security需要对请求页面检测权限的时候调用。这里是MySecureResouceFilter的代码:
getAttributes()方法返回权限的名称(我称之为角色),它们控制当前url的访问权限。
4.好了,现在我们需要安装信息数据库,下一步是让Spring Security从数据库中读取用户信息。这个Spring Security 2.0的例子告诉你如何从下面这样的配置文件里获得用户和权限的列表:
你可以把这些例子的配置替换掉,这样你可以像这样从数据库中直接读取用户信息:
这里有一种非常快速容易的方法来配置安全数据库,意思是你需要使用默认的数据库表结构。默认情况下,
我的情况下,我的安全数据库表无法这样工作,它和
通过添加users-by-username-query和authorities-by-username-query属性,你可以使用你自己的 SQL覆盖默认的SQL语句。就像在acegi中一样,你必须确保你的SQL语句返回的列与Spring Security所期待的一样。这里有另一个group-authorities-by-username-query属性,我在这里没有用到,所以也没有出现在这里例子中,不过它的用法与其他两个SQl语句的方法完全一致。
dataSource bean中指示的是链接数据库的信息,它没有包含在我的配置文件中,因为它并不只用在安全中。这里是一个dataSource的例子,如果谁不熟悉可以参考一下:
5.这就是Spring Security的所有配置文件。我最后一项任务是修改以前的登陆页面。在acegi中你可以创建自己的登陆