diff --git a/core/src/main/java/org/acegisecurity/config/LogoutHandlerOrderResolver.java b/core/src/main/java/org/acegisecurity/config/LogoutHandlerOrderResolver.java
index 587715131e..baa3c06a3a 100644
--- a/core/src/main/java/org/acegisecurity/config/LogoutHandlerOrderResolver.java
+++ b/core/src/main/java/org/acegisecurity/config/LogoutHandlerOrderResolver.java
@@ -67,17 +67,21 @@ public class LogoutHandlerOrderResolver implements BeanFactoryPostProcessor {
for (int i = 0, n = names.length; i < n; i++) {
RootBeanDefinition definition = (RootBeanDefinition) beanFactory.getBeanDefinition(names[i]);
- if (Ordered.class.isAssignableFrom(definition.getBeanClass())) {
- definition.getPropertyValues().addPropertyValue("order", new Integer(getOrder(definition.getBeanClass())));
- } else {
- definition.getPropertyValues().addPropertyValue("order", new Integer(Integer.MAX_VALUE));
+ if (definition.hasBeanClass()) {
+ if (Ordered.class.isAssignableFrom(definition.getBeanClass())) {
+ definition.getPropertyValues().addPropertyValue("order",
+ new Integer(getOrder(definition.getBeanClass())));
+ }
+ else {
+ definition.getPropertyValues().addPropertyValue("order", new Integer(Integer.MAX_VALUE));
+ }
}
list.add(definition);
}
Collections.sort(list, new OrderComparator());
return list;
}
-
+
private int getOrder(Class clazz) {
if (clazz.getName().equals(TokenBasedRememberMeServices.class.getName())) {
return 100;
diff --git a/core/src/test/java/org/acegisecurity/config/LogoutFilterBeanDefinitionParserTests.java b/core/src/test/java/org/acegisecurity/config/LogoutFilterBeanDefinitionParserTests.java
index 5161fdd470..68a1b7b8ef 100644
--- a/core/src/test/java/org/acegisecurity/config/LogoutFilterBeanDefinitionParserTests.java
+++ b/core/src/test/java/org/acegisecurity/config/LogoutFilterBeanDefinitionParserTests.java
@@ -3,19 +3,27 @@
*/
package org.acegisecurity.config;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
+import java.util.Map;
import junit.framework.TestCase;
+import org.acegisecurity.ui.logout.LogoutHandler;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
/**
* @author vpuri
- *
+ *
*/
public class LogoutFilterBeanDefinitionParserTests extends TestCase {
-
- public void testLogoutFilter(){
- ApplicationContext context = new ClassPathXmlApplicationContext("org/acegisecurity/config/logout-filter-with-handlers.xml");
+
+ public void testLogoutFilter() {
+ ApplicationContext context = new ClassPathXmlApplicationContext(
+ "org/acegisecurity/config/logout-filter-with-handlers.xml");
+ ConfigurableListableBeanFactory bf = (ConfigurableListableBeanFactory) context.getAutowireCapableBeanFactory();
+ Map m = bf.getBeansOfType(LogoutHandler.class);
+ assertEquals(2, m.size());
}
}
diff --git a/core/src/test/resources/org/acegisecurity/config/logout-filter-with-handlers.xml b/core/src/test/resources/org/acegisecurity/config/logout-filter-with-handlers.xml
index 94208ced75..b58573168e 100644
--- a/core/src/test/resources/org/acegisecurity/config/logout-filter-with-handlers.xml
+++ b/core/src/test/resources/org/acegisecurity/config/logout-filter-with-handlers.xml
@@ -14,11 +14,14 @@ http://www.springframework.org/schema/security http://www.springframework.org/sc
+ redirectAfterLogoutUrl="/" logoutUrl="/logout" />
+
+
diff --git a/samples/tutorial/src/webapp/WEB-INF/applicationContext-acegi-security.xml b/samples/tutorial/src/webapp/WEB-INF/applicationContext-acegi-security.xml
index f64466ea77..200ba61d5e 100644
--- a/samples/tutorial/src/webapp/WEB-INF/applicationContext-acegi-security.xml
+++ b/samples/tutorial/src/webapp/WEB-INF/applicationContext-acegi-security.xml
@@ -1,148 +1,174 @@
-
-
-
-
-
-
-
-
-
-
- CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
- PATTERN_TYPE_APACHE_ANT
- /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
- PATTERN_TYPE_APACHE_ANT
- /secure/extreme/**=ROLE_SUPERVISOR
- /secure/**=IS_AUTHENTICATED_REMEMBERED
- /**=IS_AUTHENTICATED_ANONYMOUSLY
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
+ PATTERN_TYPE_APACHE_ANT
+ /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
+ PATTERN_TYPE_APACHE_ANT
+ /secure/extreme/**=ROLE_SUPERVISOR
+ /secure/**=IS_AUTHENTICATED_REMEMBERED
+ /**=IS_AUTHENTICATED_ANONYMOUSLY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file