- 浏览: 1419774 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (409)
- Java (48)
- Spring (29)
- struts2 (17)
- hibernate (4)
- 设计模式 (24)
- jbpm (1)
- JavaScript (5)
- 统计报表 (7)
- ExtJS_3.0 (35)
- struts1 (1)
- 分析设计 (3)
- Flex3 (24)
- UML (2)
- 数据库 (18)
- PowerDesigner (2)
- 应用服务器 (3)
- WebService (5)
- ActiveMQ_5.3.2 (6)
- Java通信技术 (11)
- GWT (6)
- OSGi (15)
- android (11)
- liferay6.0.6 (13)
- jquery (13)
- Linux (3)
- java.util.concurrent (16)
- guava (9)
- 开发模式 (1)
- 大数据 (2)
- 互联网金融 (4)
- treegrid-3.0 (7)
- 分布式 (8)
- GO语言 (4)
- maven (1)
- 缓存技术 (6)
- 其他 (2)
- 前端页面 (1)
- heasy (1)
- spring cloud(F版) (21)
- springboot (12)
- springmvc (5)
- mybatis (3)
- dubbo (1)
- 物联网 (0)
最新评论
-
raymond.chen:
谢谢您的分享
使用Ngrok解决通过外网访问内网web应用 -
wangyudong:
速度有点慢,不过在也找到了一个开源的holer,配置一个key ...
使用Ngrok解决通过外网访问内网web应用 -
a1006458222:
...
Axis2的部署和应用 -
偷师来了:
不好意思 这样的博客我觉得就灭有必要分享出来了 命令大家都会看 ...
Consul框架介绍 -
lliiqiang:
怎么直接删除文件夹啊?固定的几个文件可以删除,不固定的呢?需要 ...
Flex AIR —— 文件读写
Acegi Security是一个能为基于Spring的企业应用提供强大而灵活安全访问控制解决方案的框架,Acegi已经成为Spring官方的一个子项目,所以也称为Spring Security。它通过在Spring容器中配置一组Bean,充分利用Spring的IoC和AOP功能,提供声明式安全访问控制的功能。
下面将详细介绍Acegi在Spring中如何配置,配置范例是在acegi-security-1.0.6版本下测试通过的。
1、在web.xml中的配置
2、filterChainProxy的配置
3、httpSessionContextIntegrationFilter的配置
4、logoutFilter的配置
5、认证处理过滤器authenticationProcessingFilter的配置
6、认证管理器authenticationManager的配置
7、身份验证提供者的配置
8、securityContextHolderAwareRequestFilter的配置
9、anonymousProcessingFilter的配置
10、exceptionTranslationFilter的配置
11、filterInvocationInterceptor的配置
12、访问决策管理器accessDecisionManager的配置
下面将详细介绍Acegi在Spring中如何配置,配置范例是在acegi-security-1.0.6版本下测试通过的。
1、在web.xml中的配置
<!-- 声明Spring Bean的配置文件列表 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/applicationContext.xml, /WEB-INF/config/ beans-acegi.xml </param-value> </context-param> <!-- 声明Acegi过滤器 --> <filter> <filter-name>securityFilter</filter-name> <filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class> <init-param> <param-name>targetClass</param-name> <param-value>org.acegisecurity.util.FilterChainProxy</param-value> </init-param> </filter> <filter-mapping> <filter-name>securityFilter</filter-name> <url-pattern>/j_security_check</url-pattern> </filter-mapping> <filter-mapping> <filter-name>securityFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 说明: 1)安全框架会对/j_security_check和所有的请求进行权限控制。 2)Acegi通过实现了Filter接口的FilterToBeanProxy提供一种特殊的使用Servlet Filter的方式,它委托Spring中的Bean -- FilterChainProxy来完成过滤功能,以便简化web.xml的配置,并且可以充分利用Spring IOC的优势。FilterChainProxy包含了处理认证过程的filter列表,每个filter都有各自的功能。
2、filterChainProxy的配置
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor</value> </property> </bean> 说明: 1) 过滤器列表必须位于同一行内,中间不能换行。这些过滤器将按顺序被调用。 2) CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON:表示URL比较前先转为小写。 3) PATTERN_TYPE_APACHE_ANT:表示使用Apache Ant的匹配模式
3、httpSessionContextIntegrationFilter的配置
<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/> 说明: 1) 必须将该Filter配置为过滤器链中第一个过滤器,使验证信息能跨越多个请求。 2) 为了解决认证主体安全信息能在多个Http请求之间保持共享,Acegi将认证主体安全信息缓存于HttpSession中,当用户请求一个受限的资源时,Acegi通过HttpSessionContextIntegrationFilter将认证主体信息从HttpSession中加载到SecurityContext实例中,认证主体关联的SecurityContext实例则保存在Acegi容器级的SecurityContextHolder里。当请求结束之后,HttpSessionContextIntegrationFilter执行相反的操作,将SecurityContext中的认证主体安全信息重新转存到HttpSession中,然后从SecurityContextHolder中清除对应的SecurityContext实例。 3) SecurityContextHolder是框架级的容器,它保存着和所有用户关联SecurityContext实例,SecurityContext承载着用户的帐号及权限信息,通过以下方法可以取到这些信息:SecurityContextHolder.getContext().getAuthentication()。
4、logoutFilter的配置
<bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter"> <constructor-arg value="/index.jsp"/> <constructor-arg> <list> <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/> </list> </constructor-arg> <property name="filterProcessesUrl" value="/j_acegi_logout"/> </bean> 说明: 1)负责处理退出系统后所需要的清理工作。 2) LogoutFilter过滤器的构造方法有两个参数: 一个表示成功退出系统后转向的URL; 另一个表示退出系统前需要执行的操作,执行的操作可以有多个。 3) SecurityContextLogoutHandler操作类会把HttpSession销毁,清除SecurityContextHolder里的SecurityContext实例,把rememberMeServices从cookies中清除。然后重定向到指定的退出登录页面。 4) filterProcessesUrl:指定用于响应退出系统请求的URL,其默认值为 /j_acegi_logout。当访问的URL为filterProcessesUrl属性值时,logoutFilter过滤器将会被调用。
5、认证处理过滤器authenticationProcessingFilter的配置
<bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> <property name="filterProcessesUrl" value="/j_security_check"/> <property name="authenticationFailureUrl" value="/index.jsp?login_error=1"/> <property name="defaultTargetUrl" value="/main.action"/> <property name="authenticationManager" ref="authenticationManager"/> <property name="rememberMeServices" ref=""/><!-可选 --> </bean> 说明: 1)负责处理基于表单的身份验证请求。 2)当接收到与filterProcessesUrl所定义相同的请求时,它会首先通过AuthenticationManager来验证用户身份。如果验证成功,则重定向到defaultTargetUrl所定义的成功登陆页面。如果验证失败,则再从 rememberMeServices中获取用户身份。若再获取失败,则重定向到auhenticationFailureUrl所定义的登陆失败页面。 3)filterProcessesUrl:默认值为/j_acegi_security_check。该值必须与登录页面form的action值一致。 form中输入用户名的input控件的name必须为j_username;输入密码的input控件的name必须为j_password。 4)rememberMeServices 负责通过以cookie的形式保存先前的用户登录信息。在Authentication对象不存在时, rememberMeProcessingFilter会调用rememberMeServices的autoLogin()方法,尝试在cookies 中获取用户登录信息,如果存在则返回Authentication对象。在每次用户登录时,如果设置了RememberMe功能,在验证用户身份成功后,则会调用loginSuccess()方法记录用户信息在cookies中,否则调用loginFail()方法清除cookie。
6、认证管理器authenticationManager的配置
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> <property name="providers"> <list> <ref local="daoAuthenticationProvider"/> <ref local="anonymousAuthenticationProvider"/> </list> </property> </bean> 说明: 1)认证管理器用来管理身份验证提供者。它将验证的功能委托给多个Provider,并通过遍历Providers, 以保证获取不同来源的身份认证,若某个Provider能成功确认当前用户的身份,authenticate()方法会返回一个完整的包含用户授权信息的Authentication对象,否则会抛出一个AuthenticationException。 2)无论成功与否,认证管理器都会发布一个ApplicationEvent事件对象。
7、身份验证提供者的配置
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService" ref="userDao"/> <property name="userCache" ref="userCache"/> <property name="passwordEncoder" ref="passwordEncoder"/><!-可选 --> </bean> <bean id="anonymousAuthenticationProvider" class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider"> <property name="key" value="anonymous"/> </bean> <bean id="userDao" class="com.cjm.web.dao.impl.UserDaoImpl"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache"> <property name="cache"> <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean"> <property name="cacheManager"> <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/> </property> <property name="cacheName" value="userCache"/> </bean> </property> </bean> <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder"/> 说明: 1)daoAuthenticationProvider:负责提供用户信息,包括用户名和密码。其中取用户名密码的工作交给userDetailsService来做。 2)anonymousAuthenticationProvider:匿名用户身份验证。 3)userDao:用于在数据库中获取用户信息。UserDaoImpl需要实现Acegi提供的UserDetailsService接口类。 4)userCache:缓存用户和资源相对应的权限信息。每当请求一个受保护资源时,daoAuthenticationProvider就会被调用以获取用户授权信息。如果每次都从数据库获取的话,那代价很高,对于不常改变的用户和资源信息来说,最好是把相关授权信息缓存起来。 5)passwordEncoder:使用加密器对用户输入的明文进行加密。Acegi提供了三种加密器: PlaintextPasswordEncoder---默认,不加密,返回明文 ShaPasswordEncoder---哈希算法(SHA)加密 d5PasswordEncoder---消息摘要(MD5)加密
8、securityContextHolderAwareRequestFilter的配置
<bean id="securityContextHolderAwareRequestFilter" class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter"/> 说明: 1)负责通过Decorate Model(装饰模式)装饰HttpServletRequest对象。 其Wapper是ServletRequest包装类 HttpServletRequestWrapper的子类(SavedRequestAwareWrapper或者 SecurityContextHolderAwareRequestWrapper)。附上获取用户权限信息,request参数,header, Date,headers和cookies的方法。
9、anonymousProcessingFilter的配置
<bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter"> <property name="key" value="anonymous"/> <property name="userAttribute" value="anonymous,ROLE_ANONYMOUS"/> </bean> 说明: 1)该过滤器用于判断ContextHolder中是否有Authentication对象,如果没有就创建一个Authentication对象,其中包含的用户名是anonymous,用户权限是ROLE_ANONYMOUS。这使得没有登录的匿名用户能够自动的获得匿名的用户名和权限。
10、exceptionTranslationFilter的配置
<bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter"> <property name="authenticationEntryPoint"> <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"> <property name="loginFormUrl" value="/index.jsp"/> <property name="forceHttps" value="false"/> </bean> </property> <property name="accessDeniedHandler"> <bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl"> <property name="errorPage" value="/accessDenied.jsp" /> </bean> </property> </bean> 说明: 1) 该过滤器用于处理身份验证和授权过程中的异常情况。 2) authenticationEntryPoint:将用户重定向到一个基于HTML表单的登录页面。 loginFormUrl:指定登录页面。 forceHttps:指定是否强制使用HTTPS协议。 3)errorPage:指定访问拒绝时要跳转到的页面。
11、filterInvocationInterceptor的配置
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"> <property name="authenticationManager" ref="authenticationManager"/> <property name="accessDecisionManager" ref="accessDecisionManager"/> <property name="objectDefinitionSource"> <value> PATTERN_TYPE_APACHE_ANT /index.jsp*=ROLE_ANONYMOUS /accessDenied.jsp*=ROLE_ANONYMOUS /**/*.jsp*=ADMIN,SYS_MANAGER /**/*.htm*=ADMIN,SYS_MANAGER /**/*.action*=ADMIN,SYS_MANAGER </value> </property> </bean> 说明: 1)该Filter 会首先调用AuthenticationManager判断用户是否已登陆认证,如还没认证成功,则重定向到登陆界面。如认证成功,则从 Authentication中获取用户的权限。然后从objectDefinitionSource属性获取各种URL资源所对应的权限。最后调用 AccessDecisionManager来判断用户所拥有的权限与当前受保护的URL资源所对应的权限是否相匹配。如果匹配失败,则返回403错误给用户。如果匹配成功,则用户可以访问受保护的URL资源。
12、访问决策管理器accessDecisionManager的配置
<bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"> <property name="allowIfAllAbstainDecisions" value="false"/> <property name="decisionVoters"> <list> <bean class="org.acegisecurity.vote.RoleVoter"> <property name="rolePrefix" value=""/> </bean> </list> </property> </bean> 说明: 1)通过投票机制来决定是否可以访问某一资源。Acegi提供三种投票通过策略的实现: AffirmativeBased(至少一个投票者同意方可通过) ConsensusBased(多数投票者同意方可通过) UnanimousBased(所有投票者同意方可通过) 2)allowIfAllAbstainDecisions:设定是否允许 "没人反对就通过" 的投票策略。 3) rolePrefix:角色投票者支持的权限前缀,默认为ROLE_。权限必须以rolePrefix设定的值开头才能进行投票。
评论
3 楼
flyfan
2008-08-29
用2.0简单多了,不用这么麻烦
2 楼
javeye
2008-08-29
恩,写得比较仔细。不过现在有acegi2.0了,说做了较大的简化。不知道有没有研究过啊?
1 楼
qaybpljplj
2008-08-29
恩啊 写得不错!
发表评论
-
自定义Spring命名空间
2019-02-19 20:12 4801、定义schema约束xsd文件 将xsd ... -
Spring表达式语言
2019-02-19 17:17 643Spring表达式语言(Spring Expression ... -
Spring AOP使用整理:常用的Pointcut和PointcutAdvisor
2019-02-17 23:07 2206Spring常用的PointcutAdviso ... -
Spring的拦截器
2019-02-17 16:11 2056Spring的拦截器主要分两种,一个是HandlerInt ... -
Spring的动态代理
2019-02-17 15:23 977AOP是Spring的重要组成 ... -
spring retry框架的使用
2019-02-16 21:17 981spring retry是从spring batch独立出 ... -
Spring BackOff退避算法
2019-02-15 22:21 3731Spring的util包提供了退避算法的实现,BackOff ... -
Spring事件驱动模型概念及使用范例
2016-12-01 16:49 2611一、概念: 二、使用要点: 事件对 ... -
自定义基于Spring的自动扫描器
2016-04-18 18:08 2159主要代码结构如下: //Ant模式通配符的Resourc ... -
资源查找器PathMatchingResourcePatternResolver的使用
2016-04-18 10:12 4280PathMatchingResourcePatternRe ... -
Spring常用的过滤器
2015-10-18 02:48 18301、CharacterEncodingFilter ... -
Spring常用的监听器
2015-10-18 02:38 45371、IntrospectorCleanupListen ... -
Spring+Hibernate环境下CLOB字段值的处理
2011-07-22 15:22 1541软件环境: Spring:2.5.4 ... -
Spring常用的接口和类(三)
2011-04-10 21:35 2813一、CustomEditorConfigurer ... -
AOP概念
2010-06-10 16:14 1464AOP (Aspect Oriented Programmi ... -
IoC原理
2010-06-10 15:31 1407IoC(Inversion of Control)就是由容器控 ... -
Spring AOP使用整理:使用@AspectJ风格的切面声明
2009-08-24 11:31 8379要启用基于@AspectJ风格 ... -
Spring注解类的整理
2009-08-23 01:58 1844二、Spring内置注解 1、@Compone ... -
自定义注解
2009-08-21 14:51 16405java内置注解 1、@Target: 表示该 ... -
Spring AOP使用整理:常用的AutoProxyCreator
2009-04-10 12:44 3632一、自动代理创建器 创建器是BeanPost ...
相关推荐
我在配置spring security2.0是的工作笔记 很有启发性
然而对于一个完整的应用系统,完善的认证和授权机制是必不可少的,Acegi是一个基于Spring的安全框架,探讨了Spring框架集成Acegi的方法,即在Spring的IOC配置文件中定义所有的安全逻辑,改变了传统的通过编写代码的...
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...
acegi安全框架例子--Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。
整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用Acegi实施应用系统安全 第...
整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用Acegi实施应用系统安全 第...
整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用Acegi实施应用系统安全 第...
acegi安全系统,是一个用于spring framework的安全框架,能够和目前流行的web容器无缝集成。它使用了spring的方式提供了安全和认证安全服务,包括使用bean context,拦截器和面向接口的编程方式。因此,acegi安全...
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...
×××总共两个zip文件... spring acegi安全框架在用户验证和授权机制的实现上有何过人之处? 如何在spring的基础上进行扩展开发? 你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
spring acegi安全框架在用户验证和授权机制的实现上有何过人之处? 如何在spring的基础上进行扩展开发? 你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
Spring ACEGI安全框架在用户验证和授权机制的实现上有何过人之处? 如何在Spring的基础上进行扩展开发? 你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
spring acegi安全框架在用户验证和授权机制的实现上有何过人之处? 如何在spring的基础上进行扩展开发? 你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
Spring ACEGI安全框架在用户验证和授权机制的实现上有何过人之处? 如何在Spring的基础上进行扩展开发? 你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
Spring ACEGI安全框架在用户验证和授权机制的实现上有何过人之处? 如何在Spring的基础上进行扩展开发? 你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
在安全方面集成Spring的安全框架Acegi和最流行的Ajax技术。与其他框架相比,它提供了各种Web系统开发过程中都需要开发的一些功能,如登陆、用户密码加密,用户管理、根据不同的用户可以展现不同的菜单,同时还带有...
Spring技术内幕 深入... Spring ACEGI安全框架在用户验证和授权机制的实现上有何过人之处? 如何在Spring的基础上进行扩展开发? 你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?