欢迎来到天天文库
浏览记录
ID:11875733
大小:31.50 KB
页数:10页
时间:2018-07-14
《实现基于spring框架应用的权限控制系统》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实现基于Spring框架应用的权限控制系统服务时,OOP就无能为力了,只能在所有相关类中加入类似的系统服务级的代码。AOP为解决系统级服务问题提供了一种很好的方法。AOP将系统服务分解成方面看待,并为类提供一种声明式系统服务方式。Java类不需要知道日志服务的存在也不需要考虑相关的代码。所以,用AOP编写的应用程序是松耦合的,代码的复用性就提高了。 2、Acegi安全框架 借助于Spring框架,开发者能够快速构建结构良好的WEB应用,但现有的Spring框架本身没有提供安全相关的解决方案。同样来自于OpenSource社区的A
2、cegi安全框架为实现基于Spring框架的WEB应用的安全控制提供了一个很好的解决方案。Acegi本身就是利用Spring提供的IoC和AOP机制实现的一个安全框架,它将安全性服务作为J2EE平台中的系统级服务,以AOPAspect形式发布。所以借助于Acegi安全框架,开发者能够在Spring使能应用中采用声明式方式实现安全控制。 Acegi安全框架主要由安全管理对象、拦截器以及安全控制管理组件组成。安全管理对象是系统可以进行安全控制的实体,Acegi框架主要支持方法和URL请求两类安全管理对象;拦截器是Acegi中的重要部件
3、,用来实现安全控制请求的拦截,针对不同的安全管理对象的安全控制请求使用不同的拦截器进行拦截;安全控制管理部件是实际实现各种安全控制的组件,对被拦截器拦截的请求进行安全管理与控制,主要组件包括实现用户身份认证的AuthenticationManager、实现用户授权的AccessDecisionManager以及实现角色转换的RunAsManager。安全管理对象、拦截器以及安全控制管理组件三者关系如图1所示。 Acegi安全框架在基于Spring框架的系统中的应用 1、分析系统安全性需求 首先,需要明确进行安全控制的对象,可为
4、业务方法和URL资源。 其次,需要进一步明确,系统身份认证资料和资源授权信息的数据持久化形式。 2、Acegi安全系统数据库设计 在Acegi框架中支持多种安全信息的持久化方式,可以在配置文件中配置或存放在关系数据库。由于在实际应用中,需求是经常发生变化的。所以,在配置文件中配置是满足不了实际应用需求的。然而,Acegi本身对权限表的设计非常简单,users表{username,password,enabled}和authorities表{username,authority},这样简单的设计肯定无法适用复杂的权限需求。为了解
5、决权限管理的复杂性,在这里引入了role的概念,使得用户和权限分离,一个用户拥有多个角色,一个角色拥有多个相应的权限,这样就更灵活地支持安全策略。 同时,为了更好地配合Acegi安全框架,还引入resource的概念,资源可分为URL和FUNCTION两种,一个权限可以对应多个资源。具体的数据库设计见图2。图1安全管理对象,拦截器和安全管理组件交互图图Acegi安全控制系统数据库设计3、认证管理器,授权管理器的配置 实现系统的安全控制,首先需要对系统的安全管理器和授权管理器进行配置,系统进行认证和授权需要获取安全信息,Acegi
6、本身提供了对认证信息的获取机制,在实现认证与授权过程中,系统将主动根据配制信息和相应的信息解释安全信息的读取。图3给出了一个将用户安全信息存储在数据库中的认证管理器的配置示意图。 对应于图示的XML配置文件的代码如下:/*配置数据库datasource和Acegi的jdbcDao*/<beanid=”dataSource”class=””> <propertyname=”driverClassName”> <value>${}</value> </property> <propertyname=”url”> <value>${
7、}</value> </property>图认证管理器配制示意图<propertyname=”username”> <value>${}</value></property><propertyname=”password”> <value>${}</value></property></bean><beanid=”jdbcDaoImpl”class=”roviders.”> <propertyname=”dataSource”> <refbean=”dataSource”/> </property></bean>/*配置用户信息的
8、加密算法*/<beanid=”passwordEncoder”Class=””/>/*配置缓存有效时间*/<beanid=”userCache”class=”providers.”> …//这里对缓存有效时间进行设置</bean>/*
此文档下载收益归作者所有