《Acegi Security安全控制框架介绍》由会员分享,可在线阅读,更多相关《Acegi Security安全控制框架介绍(32页珍藏版)》请在金锄头文库上搜索。
1、Kerry DongAcegi Security安全控制框架介绍安全控制框架介绍目录目录Acegi能干什么能干什么Acegi体系结构体系结构Acegi使用实例使用实例Acegi能干什么能干什么用惯了用惯了oaoa和和tapdtapd的安全控制,来点新鲜的的安全控制,来点新鲜的Acegi是是Java社区一个比较出名的安全控制框架社区一个比较出名的安全控制框架能为企业级应用提供安全解决方案能为企业级应用提供安全解决方案成为成为Spring的子项目,又叫的子项目,又叫Spring Security利用利用Spring的的Ioc和和AOP功能,提供声明式安全控制功能,提供声明式安全控制功能功能提供的安
2、全服务:提供的安全服务: 1. URL资源访问控制资源访问控制 2. 业务方法访问控制业务方法访问控制 3. 领域对象访问控制领域对象访问控制Acegi能干什么能干什么Acegi通过多个不同用途的Servlet过滤器过滤器对URL资源进行保护,在请求受保护的URL资源前,Acegi的Servlet过滤器判断用户是否有权访问目标资源,授权者被开放访问,而未未被授权者将被阻挡在大门之外。Acegi通过Spring AOP对容器对容器中Bean的受控方法进行拦截,当用户的请求引发调用Bean的受控方法时,Acegi的方法拦截器开始工作,阻止未授权者的调用。对领域对象的访问控制建立在对Bean方法保护
3、的基础上方法保护的基础上,在最终开放目标Bean方法的执行前,Acegi将检查用户的ACL(Aeccess Control List:访问控制列表)是否包含正要进行操作的领域对象,只有领域对象被授权时,用户才可以使用Bean方法对领域对象进行处理。此外,Acegi还可以对Bean方法返回的结果进行过滤,将一些不在当前用户访问权限范围内的领域对象剔除掉即传统的数据可视域范围的控制。一般来说,使用Acegi控制数据可视域并非理想的选择,相反通过传统的动态SQL的解决方案往往更加简单易行。Acegi能干什么能干什么Acegi支持的认证支持的认证 (登录方式)(登录方式)1. Basic 1. Bas
4、ic :服务器返回401(authentication required)状态,客户端弹出一个窗口,用于输入用户名和密码 用户名密码以及内容都是以非加密的方式传输2. 2. 摘要:摘要:客户端返回用户名和密码的摘要信息(比如说MD5加密)黑客还是可以利用digest值来访问网站。并且,它对内容并不加密3. Form 3. Form :高度可定制:可以根据自己的需要来实现认证逻辑。服务器端保存客户端信息(比如session)。客户端保存cookie,一般是username和一个cookie值(比如sessionId)的组合。4. 4. 证书证书 :使用SSL协议和数字证书身份证明5. 5. 单点
5、登录:单点登录:多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统通过ticket表明身份Acegi能干什么能干什么Acegi支持的认证支持的认证 (数据源数据源)1. 1. 数据库数据库 : 最常用的方式,结构灵活2. LDAP :2. LDAP : 从LDAP服务器中获取用户信息3. JAAS 3. JAAS : Java验证和授权API,提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序,基于用户的访问控制,即根据谁在运行代码来进行授权4. CAS :4. CAS : 根据Yale中心认证服务进行认证5. X5095. X509 使用509数字证书中进行验证6.
6、 Remember Me6. Remember Me 从Cookie中获取用户信息7. 7. 匿名登录:匿名登录: 匿名访问。 Acegi能干什么能干什么传输协议传输协议HTTP HTTP : HTTP Post发送的表单数据以明文传送,安全性比较差HTTPS HTTPS : SSL + HTTP 需要WEB服务器和浏览器两方支持 SSL在TCP/IP层和应用层之间,对传输数据进行加密 HTTPS带来了的响应性能损耗,并不是所有资源都需要加密 Acegi支持通过简单配置实现基于HTTP和HTTPS的访问控制目录目录Acegi能干什么能干什么Acegi体系结构体系结构Acegi使用实例使用实例A
7、cegi体系结构体系结构Acegi体系结构体系结构AuthenticationManager认证管理器,完成身份的认证AccessDecisionManager访问控制管理器,完成资源的访问授权SecurityContext存储认证以后身份和权限信息在一次请求的多个调用之间共享通过session在多次调用间共享保存在SecurityContextHolder中Acegi体系结构体系结构Acegi体系结构体系结构AuthenticationManager1.AuthenticationManager将身份认证的工作委托给多个AuthenticationProvider。2.不同的Authenti
8、cationProvider执行诸如用户信息查询、用户身份判断、用户授权信息获取等工作(如数据库、CA中心、LDAP)3.只要有一个AuthenticationProvider可以识别用户的身份,AuthenticationManager就通过用户身份认证,并将用户的授权信息放入到SecurityContext中Acegi体系结构体系结构AccessDecisionManager1.AccessDecisionManager采用民主决策机制判断用户是否有权访问目标程序资源,它包含了多个AccessDecisionVoter。2.在访问决策时每个AccessDecisionVoter都拥有投票权
9、,AccessDecisionManager统计投票结果,并按照某种决策方式根据这些投票结果决定最终是否向用户开放受限资源的访问。Acegi体系结构体系结构UserDetail loadUserByUserName(String username)Authentication Object getPrincipal() 获取用户对象被认证后将UserDetail中的权限信息加载进来是Acegi进行安全访问控制的用户安全信息对象存储在SecurityContext中目录目录Acegi能干什么能干什么Acegi体系结构体系结构Acegi使用实例使用实例Acegi使用实例使用实例1.在请求的最开始进
10、行拦截过滤Web.xml channelFilterProxy org.acegisecurity.util.FilterToBeanProxy targetClass org.acegisecurity.securechannel.ChannelProcessingFilter channelFilterProxy /*Acegi使用实例使用实例2. 配置具体的拦截过程 spring配置contextConfigLocationclasspath:applicationContext.xmlorg.springframework.web.context.ContextLoaderListen
11、er Acegi使用实例使用实例3. 配置具体安全拦截逻辑CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISONPATTERN_TYPE_APACHE_ANT/*=httpSessionContextIntegrationFilter,authenticationProcessingFilter,logoutFilter有具体的多个逻辑过滤器组成每一个都要定义对应的Bean处理 Acegi使用实例使用实例4. 身份认证管理配置 用户名:密 码: Acegi使用实例使用实例5. 身份认证管理配置 认证管理器 (基于内存的认证)John=john,PRIV_COMMO
12、N,PRIV_1Tom=tom,PRIV_COMMON,PRIV_1,PRIV_2Peter=peter,disabled,PRIV_COMMON,PRIV_1Acegi使用实例使用实例6. 身份认证管理配置 密码加密 Acegi使用实例使用实例7. 多个请求间共享SecurityContext 通过HttpSessionContextIntegrationFilter,将session中获取SecurityContext放入SecurityContextHolder中,请求结束时再放入session中。CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISONPAT
13、TERN_TYPE_APACHE_ANT/*=httpSessionContextIntegrationFilter,authenticationProcessingFilter,logoutFilterAcegi使用实例使用实例8. 退出处理CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISONPATTERN_TYPE_APACHE_ANT/*=httpSessionContextIntegrationFilter,authenticationProcessingFilter,logoutFilter Acegi使用实例使用实例9. Remember Mea.
14、登陆时将用户名密码信息记录到cookie 5天内不再登陆b.根据rememberme登录 bean id=“authticationMananger” . Acegi使用实例使用实例10. URL资源访问控制 CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISONPATTERN_TYPE_APACHE_ANT/*=authenticationProcessingFilter,logoutFilter,filterSecurityInterceptor CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISON PATTERN_TYPE_A
15、PACHE_ANT /secure/*=ROLE_USER /secure/manage/*=ROLE_ADMIN /*=ROLE_ANONYMOUS Acegi使用实例使用实例11. 异常访问控制 Acegi使用实例使用实例12. 业务方法控制 *.*.*Dao=ROLE_ADMIN * =ROLE_USER 使用注释Secured(“ROLE_ADMIN,ROLE_USER”)Acegi使用实例使用实例其他功能:HTTPSSession并发页面标签库缓存Captcha图片验证X509。Acegi使用实例使用实例Acegi3新版本的改变新版本的改变1.支持Spring3.0. ,现在只能在JDK-5.0以上环境使用,不再支持JDK-1.4以及之前的版本。2.大量重构代码结构,将核心库core,命名空间config,web验证部分都严格的分成独立的模块,不再像以前一样把所有代码都混放放core中。 3.支持Expression,现在无论是命名空间,配置文件,taglib中都可以使用表达式来指定需要的配置了。 4.方便的配置标签库Acegi使用实例使用实例 Acegi使用实例使用实例 Acegi使用实例使用实例官方网站:官方网站:http:/static.springsource.org/spring-security/site/index.html