|
@@ -0,0 +1,133 @@
|
|
|
|
+<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
|
|
|
+
|
|
|
|
+<!--
|
|
|
|
+ - Application context containing authentication, channel
|
|
|
|
+ - security and web URI beans.
|
|
|
|
+ -
|
|
|
|
+ - Only used by "ldap" artifact.
|
|
|
|
+ -
|
|
|
|
+ - $Id$
|
|
|
|
+ -->
|
|
|
|
+
|
|
|
|
+<beans>
|
|
|
|
+
|
|
|
|
+ <!-- ======================== FILTER CHAIN ======================= -->
|
|
|
|
+
|
|
|
|
+ <!-- if you wish to use channel security, add "channelProcessingFilter," in front
|
|
|
|
+ of "httpSessionContextIntegrationFilter" in the list below -->
|
|
|
|
+ <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
|
|
|
|
+ <property name="filterInvocationDefinitionSource">
|
|
|
|
+ <value>
|
|
|
|
+ CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
|
|
|
|
+ PATTERN_TYPE_APACHE_ANT
|
|
|
|
+ /**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,securityEnforcementFilter
|
|
|
|
+ </value>
|
|
|
|
+ </property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <!-- ======================== AUTHENTICATION ======================= -->
|
|
|
|
+
|
|
|
|
+ <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
|
|
|
|
+ <property name="providers">
|
|
|
|
+ <list>
|
|
|
|
+ <ref local="ldapAuthenticationProvider"/>
|
|
|
|
+ </list>
|
|
|
|
+ </property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <bean id="initialDirContextFactory" class="org.acegisecurity.providers.ldap.DefaultInitialDirContextFactory">
|
|
|
|
+ <property name="managerDn"><value>cn=manager,dc=acegisecurity,dc=org</value></property>
|
|
|
|
+ <property name="managerPassword"><value>acegisecurity</value></property>
|
|
|
|
+ <property name="url"><value>ldap://monkeymachine:389/dc=acegisecurity,dc=org</value></property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <bean id="ldapAuthenticationProvider" class="org.acegisecurity.providers.ldap.LdapAuthenticationProvider">
|
|
|
|
+ <property name="authenticator"><ref local="ldapAuthenticator"/></property>
|
|
|
|
+ <property name="authoritiesPopulator"><ref local="authoritiesPopulator"/></property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <bean id="authoritiesPopulator" class="org.acegisecurity.providers.ldap.populator.DefaultLdapAuthoritiesPopulator">
|
|
|
|
+ <property name="initialDirContextFactory"><ref local="initialDirContextFactory"/></property>
|
|
|
|
+ <property name="groupSearchBase"><value>ou=groups</value></property>
|
|
|
|
+ <property name="groupRoleAttribute"><value>ou</value></property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <bean id="ldapAuthenticator" class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
|
|
|
|
+ <property name="initialDirContextFactory"><ref local="initialDirContextFactory"/></property>
|
|
|
|
+ <property name="userDnPattern"><value>uid={0},ou=people</value></property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <!-- Automatically receives AuthenticationEvent messages -->
|
|
|
|
+ <bean id="loggerListener" class="org.acegisecurity.event.authentication.LoggerListener"/>
|
|
|
|
+
|
|
|
|
+ <bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <!-- ===================== HTTP REQUEST SECURITY ==================== -->
|
|
|
|
+
|
|
|
|
+ <bean id="securityEnforcementFilter" class="org.acegisecurity.intercept.web.SecurityEnforcementFilter">
|
|
|
|
+ <property name="filterSecurityInterceptor"><ref local="filterInvocationInterceptor"/></property>
|
|
|
|
+ <property name="authenticationEntryPoint"><ref local="authenticationProcessingFilterEntryPoint"/></property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
|
|
|
|
+ <property name="authenticationManager"><ref bean="authenticationManager"/></property>
|
|
|
|
+ <property name="authenticationFailureUrl"><value>/acegilogin.jsp?login_error=1</value></property>
|
|
|
|
+ <property name="defaultTargetUrl"><value>/</value></property>
|
|
|
|
+ <property name="filterProcessesUrl"><value>/j_acegi_security_check</value></property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <bean id="authenticationProcessingFilterEntryPoint" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
|
|
|
|
+ <property name="loginFormUrl"><value>/acegilogin.jsp</value></property>
|
|
|
|
+ <property name="forceHttps"><value>false</value></property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <bean id="httpRequestAccessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
|
|
|
|
+ <property name="allowIfAllAbstainDecisions"><value>false</value></property>
|
|
|
|
+ <property name="decisionVoters">
|
|
|
|
+ <list>
|
|
|
|
+ <ref bean="roleVoter"/>
|
|
|
|
+ </list>
|
|
|
|
+ </property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <!-- 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>
|
|
|
|
+ <property name="accessDecisionManager"><ref local="httpRequestAccessDecisionManager"/></property>
|
|
|
|
+ <property name="objectDefinitionSource">
|
|
|
|
+ <value>
|
|
|
|
+ CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
|
|
|
|
+ \A/secure/super.*\Z=ROLE_WE_DONT_HAVE
|
|
|
|
+ \A/secure/.*\Z=ROLE_SUPERVISOR,ROLE_TELLER
|
|
|
|
+ </value>
|
|
|
|
+ </property>
|
|
|
|
+ </bean>
|
|
|
|
+
|
|
|
|
+ <!-- BASIC Regular Expression Syntax (for beginners):
|
|
|
|
+
|
|
|
|
+ \A means the start of the string (ie the beginning of the URL)
|
|
|
|
+ \Z means the end of the string (ie the end of the URL)
|
|
|
|
+ . means any single character
|
|
|
|
+ * means null or any number of repetitions of the last expression (so .* means zero or more characters)
|
|
|
|
+
|
|
|
|
+ Some examples:
|
|
|
|
+
|
|
|
|
+ Expression: \A/my/directory/.*\Z
|
|
|
|
+ Would match: /my/directory/
|
|
|
|
+ /my/directory/hello.html
|
|
|
|
+
|
|
|
|
+ Expression: \A/.*\Z
|
|
|
|
+ Would match: /hello.html
|
|
|
|
+ /
|
|
|
|
+
|
|
|
|
+ Expression: \A/.*/secret.html\Z
|
|
|
|
+ Would match: /some/directory/secret.html
|
|
|
|
+ /another/secret.html
|
|
|
|
+ Not match: /anothersecret.html (missing required /)
|
|
|
|
+ -->
|
|
|
|
+
|
|
|
|
+</beans>
|