`
keda413
  • 浏览: 21035 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

acegi笔记

阅读更多
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <!-- ======================== FILTER CHAIN ======================= -->
    <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
        <property name="filterInvocationDefinitionSource">
            <value>
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
				<!-- 
					每次request前 HttpSessionContextIntegrationFilter从Session中获取Authentication对象,在request完后, 
					又把Authentication对象保存到Session中供下次request使用,此filter必须其他Acegi filter前使用,使之能跨越多个请求。
				-->
	            <!-- Authentication URL 强制用户先登录 -->
                /j_security_check.login=concurrentSessionFilter,httpSessionContextIntegrationFilter,authenticationProcessingFilter
				
                <!-- Security constraints -->
              	/*.htm=concurrentSessionFilter,httpSessionContextIntegrationFilter,requestWrapperFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
	            /*.jsp=concurrentSessionFilter,httpSessionContextIntegrationFilter,requestWrapperFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
	            /*/*.htm=concurrentSessionFilter,httpSessionContextIntegrationFilter,requestWrapperFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
	            /rw/*.htm=concurrentSessionFilter,httpSessionContextIntegrationFilter,requestWrapperFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
	            /rw/*/*.htm=concurrentSessionFilter,httpSessionContextIntegrationFilter,requestWrapperFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
				/*/*.jsp=concurrentSessionFilter,httpSessionContextIntegrationFilter,requestWrapperFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
				/*/*/*.htm=concurrentSessionFilter,httpSessionContextIntegrationFilter,requestWrapperFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
				/*/*/*/*.htm=concurrentSessionFilter,httpSessionContextIntegrationFilter,requestWrapperFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
            </value>
        </property>
    </bean>

    <!-- ======================== AUTHENTICATION ======================= -->
    
    <!-- Note the order that entries are placed against the objectDefinitionSource is critical.
         The FilterSecurityInterceptor will work from the top of the list down to the FIRST pattern that matches the request URL.
         Accordingly, you should place MOST SPECIFIC (ie a/b/c/d.*) expressions first, with LEAST SPECIFIC (ie a/.*) 
        expressions last -->
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
        <property name="authenticationManager"><ref local="authenticationManager"/></property>
                 <!-- accessDecisionManager(访问决策管理器)负责决定用户是否有恰当的权限访问受保护的资源 
                    首先通过authenticationManager判断用户是否通过认证(即是否已经登录) 
                  然后根据objectDefinitionSource的配置信息调用accessDecisionManager对用户权限进行投票  -->
        <property name="accessDecisionManager"><ref local="accessDecisionManager"/></property>
        <!-- objectDefinitionSource为URL的权限配置信息。用于指定不同的URL资源对应的权限 
               属性objectDefinitionSource告诉安全拦截器被拦截的各种请求所需要的授权是什么 -->
        <property name="objectDefinitionSource">
         									    
            <value>
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
				<!-- 对url进行角色控制 todo -->
				/logout.htm=ROLE_ANONYMOUS,menu_vie
	            /login.htm=ROLE_ANONYMOUS,menu_vie
	            /login!submit.htm=ROLE_ANONYMOUS,menu_vie
	            /login.jsp=ROLE_ANONYMOUS,menu_vie
	           <!--   /news/callCreateNews.htm=menu_vie,news_add-->
				/*.htm=menu_vie
				/*.jsp=menu_vie
				/*/*.htm=menu_vie
				/rw/*/*.htm=menu_vie
				/*/*.jsp=menu_vie
				/*/*/*.htm=menu_vie
				/*/*/*/*.htm=menu_vie
            </value>
        </property>
    </bean>
	<!-- 认证管理器负责确定用户身份,acegi提供了ProviderManager,作为AuthenticationManager的
          一个适用于大多数情形的实现 -->
    <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
        <property name="providers">  <!-- providers属性为ProviderManager提供一个认证提供者的列表 -->
            <list>
                <ref local="daoAuthenticationProvider"/>	
<!-- 使用Dao来获取用户名和密码,并使用它们来验证用户身份取得了用户名和密码之后, 
DaoAuthenticationProvider通过比较从数据库中获取的用户名和密码以及来自认证管理器的通过Authentication
对象中传入的主体和凭证完成身份验证。如果用户名和密码与主体和凭证匹配,则用户通过身份验证,同时返回给认证
管理器一个已完全填充的Authentication对象。否则会抛出一个AuthenticationException,表明身份验证失败 -->
                <ref local="anonymousAuthenticationProvider"/>
            </list>
        </property>
        <property name="sessionController" ref="concurrentSessionController" />
    </bean>
   
        <!-- Automatically receives AuthenticationEvent messages from DaoAuthenticationProvider -->
         <!-- 自动接收来自DaoAuthenticationProvider的AuthenticationEvent信息 -->
    <bean id="loggerListener" class="org.acegisecurity.event.authentication.LoggerListener"/>
         <!-- DaoAuthenticationProvider主要功能是从数据库取出用户名和密码,判断登录信息是否正确,如果是,
          则取出用户权限等用户信息,并且存放到cache中,以便以后再次使用 -->
    <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
         <property name="userDetailsService">
	         <ref local="userDetailsService"/>
         </property>
         <property name="userCache"><!-- userCache用于定义用户信息cache功能的提供者 -->
	         <ref local="userCache"/>
         </property>
    </bean>
    
    
    
    <bean id="userDetailsService" class="com.jfk.web.acegi.UserDetailService">
        <property name="userManager"><ref bean="userManager"/></property>
        <property name="userCache"><ref bean="userCache"/></property>
        <property name="permiUserManager"><ref bean="permiUserManager"/></property>
        <property name="usergroupUserManager"><ref bean="usergroupUserManager"/></property>
        <property name="permitUserGroupManager"><ref bean="permitUserGroupManager"/></property>
        <property name="permissionManger"><ref bean="permissionManager"/></property>
    </bean>
    
								
    <bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
        <property name="cache"><!-- 定义ehcache工厂bean ehcache作为cache实现。由于认证管理器
               在每次对http请求进行认证之前都会查找用户信息,通过使用cache就可以避免每次都重复访问数据库 -->
            <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
                <property name="cacheManager">
                    <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
                </property>
                <property name="cacheName"><value>userCache</value></property>
            </bean>
        </property>
    </bean>
   <!-- AnonymousAuthenticationProvider用于认证匿名用户。 -->
    <bean id="anonymousAuthenticationProvider" class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
        <property name="key">
	        <value>anonymous</value>
	    </property>
    </bean>
    <!-- RoleVoter当受保护资源有一个名字由ROLE_开始的配置属性时参与投票,RoleVoter决定投票结果的方式
           是简单地将受保护资源的所有配置属性(以ROLE_作为前缀) 与认证用户的所有授权进行比较。
如果RoleVoter发现其中有一个是匹配的,则它投ACCESS_GRANTED票。否则,它将投ACCESS_DENIED票 -->
    <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter">
        <property name="rolePrefix"><!-- 可以自己设置角色的默认前缀,value值不设置的话默认为ROLE_ -->
	        <value/>
        </property>
    </bean>

    <bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
<!-- 访问决策管理器AffirmativeBased表示当至少有一个投票者投允许访问票时允许访问 -->
       
        <property name="allowIfAllAbstainDecisions">
          <!-- 当value值设为true时表示:所有投票者全为弃权时授权访问,与投票者全部投赞成票是一样的
           当value值为false时表示:所有投票者全为弃权时禁止访问 -->
	        <value>false</value>
		</property>
        <property name="decisionVoters">
            <list>
                <ref local="roleVoter"/>
            </list>
        </property>
    </bean>
    
    <!-- ===================== HTTP REQUEST SECURITY ==================== -->
   <bean id="concurrentSessionFilter" class="org.acegisecurity.concurrent.ConcurrentSessionFilter">
		<property name="sessionRegistry" ref="sessionRegistry" />
		<property name="expiredUrl">
			<value>/expired.jsp</value><!-- 在session过期的时候就指向这个页面 -->
		</property>
	</bean>
    <!-- httpSessionContextIntegrationFilter根据session中存放的信息组装ContextHolder。
         ContextHolder主要用于存放SecureContext,包括用户的权限信息 -->
    <bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
        <property name="context">
                  <value>org.acegisecurity.context.SecurityContextImpl</value>
         </property>
    </bean>
    
    <bean id="requestWrapperFilter" class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter"/>
     <!-- AuthenticationProcessingFilter处理认证请求(通常是一个登录页面的表单请求) -->
    <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
        <property name="authenticationManager"><ref local="authenticationManager"/></property>
        <property name="authenticationFailureUrl"><value>/loginError.jsp</value></property>
        <property name="defaultTargetUrl"><value>/</value></property>
        <property name="filterProcessesUrl"><value>/j_security_check.login</value></property>
        <property name="exceptionMappings">
	        <value> 
	         org.acegisecurity.AuthenticationException=/loginError.jsp  
	        </value>   
        </property>  
    </bean>
    <!-- :anonymousProcessingFilter的作用是判断ContextHolder中是否有Authentication对象,
  如果没有就创建一个Authentication对象,其中包含的用户名是anonymous,用户权限是ROLE_ANONYMOUS。
  这使得没有登录的匿名用户能够自动的获得匿名的用户名和权限 -->
    <bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
        <property name="key">
			<value>anonymous</value>
		</property>
        <property name="userAttribute">
	        <value>anonymous,ROLE_ANONYMOUS</value>
		</property>
    </bean>
    
    <bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
        <property name="authenticationEntryPoint"><ref local="authenticationProcessingFilterEntryPoint"/></property>
    </bean>
    
    <bean id="authenticationProcessingFilterEntryPoint" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
        <!-- loginFromUrl配置了一个登录表单的URL。当需要用户登录时,
              AuthenticationProcessingFilterEntryPoint会将用户重定向到该URL -->
        <property name="loginFormUrl"><value>/login.jsp</value></property>
        <property name="forceHttps"><value>false</value></property>
    </bean>
    <!-- 防止同一帐户同时在不同地方登陆 -->
	<bean id="concurrentSessionController"   class="org.acegisecurity.concurrent.ConcurrentSessionControllerImpl">
		<property name="maximumSessions">  
	             <value>1</value>  
	    </property>  
	    <property name="sessionRegistry">  
	           <ref local="sessionRegistry" />  
	     </property>  
	     <property name="exceptionIfMaximumExceeded" value="false" />  
	 </bean>
	 <bean id="sessionRegistry"  class="org.acegisecurity.concurrent.SessionRegistryImpl" />
</beans>
 
分享到:
评论

相关推荐

    acegi——笔记学习

    在Acegi笔记中,你可能会发现以下内容: - 如何配置Acegi以启用安全保护,包括设置安全拦截器和定义安全过滤器链。 - 用户认证的实现,包括定义`UserDetailsService`来获取用户信息,以及配置不同的认证提供者。 - ...

    Acegi学习笔记(JAVA系统安全编程时用到)

    Acegi 是一个强大的 Java 安全框架,专用于系统安全编程,尤其在处理认证和授权方面表现出色。在本文中,我们将深入探讨 Acegi 的基本概念、如何设置以及它如何与 Spring 框架集成。 首先,让我们了解 Acegi 的核心...

    Acegi 概述

    Acegi是Spring Security的前身,它是一个非常强大的Java安全框架,用于解决企业级...如果你想要了解更多关于Acegi的细节,可以参考提供的博客链接或阅读"Acegi笔记.doc"文档,其中可能包含了更多实践案例和详细教程。

    Acegi学习笔记--Acegi详解实战Acegi实例

    Acegi是Spring框架早期的一个安全模块,主要用于身份验证和授权管理。在2009年,Acegi被Spring Security所吸收,成为其前身,因此理解Acegi有助于我们深入理解Spring Security的安全机制。以下是对Acegi的详细介绍和...

    acegi权限控制学习笔记

    Acegi权限控制学习笔记 Acegi安全框架是Spring Security的前身,它提供了一种强大的、灵活的、基于组件的安全解决方案,用于实现企业级应用的安全控制。在这个学习笔记中,我们将探讨两个关键点:身份认证成功后的...

    基于java的ACEGI

    AceGI,全称为Acegi Security,是Java领域中一个用于Spring框架的安全组件,它提供了全面的身份验证、授权和会话管理功能。这个框架在早期的Spring版本中非常流行,为开发者构建安全的Web应用程序提供了强大的支持。...

    acegi学习笔记

    ### Acegi学习笔记详解 #### 一、Acegi Security概览 **Acegi Security**,作为Spring Security的前身,是一个深度融入Spring Framework的安全框架,它为开发者提供了一套全面的安全解决方案,尤其在Web应用程序中...

    Acegi身份认证框架的使用笔记

    一个使用Acegi身份认证框架的笔记 可以节省你的时间 方便快速学会使用

    CAS 单点登录安装笔记3 -- 与acegi集成

    acegi-context配置文件 博文链接:https://lib.iteye.com/blog/165980

    acegi学习

    "Acegi学习笔记.doc"可能包含个人学习Acegi的过程中积累的经验和技巧,这些笔记通常会涵盖实践中的问题解决和案例分析。笔记中可能包含了如何配置Acegi以保护特定的Spring Bean,以及如何定义自定义的权限表达式,...

    acegi资料大全-全集

    `Acegi学习小结-Spring-Java -JavaEye做最棒的软件开发交流社区.mht`可能是一个社区成员的学习笔记,汇总了他在使用Acegi过程中遇到的问题和解决办法,这类资料往往能提供实战中的宝贵经验。 `学习Acegi-认证...

    良葛格java学习笔记

    常見程式演算,電腦圖學入門,設計模式,C 語言,GTK,C++,Qt3,Qt4,,Java (上),Java (下),JSP/Servlet,JSF,Ajax,JUnit,Struts,Spring,Hibernate,Acegi

    appfuse 学习笔记

    此外,安全(SECURITY)是AppFuse关注的另一重要领域,它支持Spring Security(原Acegi Security)来处理用户认证和授权。 总的来说,AppFuse是一个强大的开发工具,它通过集成多种成熟技术,为开发者提供了一个...

    Spring源代码解析.rar

    Spring源代码解析1:IOC容器.doc Spring源代码解析2:IoC容器在Web容器中的启动.doc Spring源代码解析3:Spring JDBC .doc Spring源代码解析4:Spring MVC .doc ...Spring源代码解析10:Spring Acegi框架授权的实现.doc

    AppFuse学习笔记

    它集成了多种流行的技术,如 Ant 构建工具、Tapestry 表现层框架、Hibernate 持久层框架、Spring 事务管理和服务层以及 Acegi 安全管理。本文将详细介绍如何使用 AppFuse 来构建一个 J2EE 应用,同时提供了一个简单...

    xdoclet_appfuse打包

    9. "appfuse.txt"和"5.txt":这两个可能是额外的文本文件,可能包含了开发者笔记、命令行脚本或其他相关信息。 总的来说,这个压缩包提供了丰富的资料,适合初学者和有经验的开发者去深入理解和使用AppFuse和...

    java文集

    ext学习笔记一 小试iBatis RIA(Rich Internet Application)的现状和未来 Java应用中域名解析不过期的解决方法 Java编程那些事儿45—数组使用示例1 一步步熟悉OFBiz 用Java做客户端调用.NET写...

Global site tag (gtag.js) - Google Analytics