どのように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における配置
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 。