どのようにSpringの中でAcegi 1.x安全な枠を統合しますか?


Acegi SecurityはSpringベースの企業アプリケーションに強力で柔軟な安全アクセス制御ソリューションを提供できる枠組みであり、AcegiはすでにSpring公式のサブプロジェクトとなっており、Spring Securityとも呼ばれる.これはSpring容器の中にBeanのセットを配置することによって、SpringのIoCとAOP機能を十分に利用して、声明式安全アクセス制御の機能を提供します.
    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、filterChanProxyの配置

	<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、httpSession Contect Integration Filterの配置

	<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、logout Filterの配置

	<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、認証処理フィルタauthentication Filterの配置

	<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、securityContect HolderAwarequest Filterの配置

	<bean id="securityContextHolderAwareRequestFilter" class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter"/>
	  :
		1)    Decorate Model(    )  HttpServletRequest  。
 Wapper ServletRequest    HttpServletRequestWrapper   (SavedRequestAwareWrapper   SecurityContextHolderAwareRequestWrapper)。          ,request  ,header, Date,headers cookies   。
9、anonymousProcessing Filterの配置

	<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、exception Translation Filterの配置

	<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、filter InvocationInterceptorの配置

	<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            。