ExceptionTranslationParserTests.java 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package org.acegisecurity.config;
  2. import java.beans.FeatureDescriptor;
  3. import java.lang.reflect.Field;
  4. import java.util.Arrays;
  5. import javax.servlet.Filter;
  6. import junit.framework.TestCase;
  7. import org.acegisecurity.ui.AccessDeniedHandler;
  8. import org.acegisecurity.ui.AccessDeniedHandlerImpl;
  9. import org.acegisecurity.ui.ExceptionTranslationFilter;
  10. import org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint;
  11. import org.springframework.beans.PropertyValue;
  12. import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
  13. import org.springframework.beans.factory.config.RuntimeBeanReference;
  14. import org.springframework.beans.factory.support.RootBeanDefinition;
  15. import org.springframework.context.ApplicationContext;
  16. import org.springframework.context.support.ClassPathXmlApplicationContext;
  17. import org.springframework.util.ReflectionUtils;
  18. public class ExceptionTranslationParserTests extends TestCase {
  19. public void testParsingBeanReferences() {
  20. ApplicationContext context = new ClassPathXmlApplicationContext(
  21. "org/acegisecurity/config/exception-translation-beanref.xml");
  22. ConfigurableListableBeanFactory factory = (ConfigurableListableBeanFactory) context
  23. .getAutowireCapableBeanFactory();
  24. String[] beanNames = factory.getBeanNamesForType(ExceptionTranslationFilter.class);
  25. assertEquals(1, beanNames.length);
  26. RootBeanDefinition def = (RootBeanDefinition) factory.getBeanDefinition(beanNames[0]);
  27. assertEquals(ExceptionTranslationFilter.class.getName(), def.getBeanClassName());
  28. // check collaborators
  29. PropertyValue accessDeniedHandler = def.getPropertyValues().getPropertyValue("accessDeniedHandler");
  30. assertNotNull(accessDeniedHandler);
  31. assertEquals(accessDeniedHandler.getValue(), new RuntimeBeanReference("theBeanToUse"));
  32. PropertyValue entryPoint = def.getPropertyValues().getPropertyValue("authenticationEntryPoint");
  33. assertNotNull(entryPoint);
  34. assertEquals(entryPoint.getValue(), new RuntimeBeanReference("authenticationProcessingFilterEntryPoint"));
  35. }
  36. public void testRuntimeBeanDependencies() {
  37. ApplicationContext context = new ClassPathXmlApplicationContext(
  38. "org/acegisecurity/config/exception-translation-beanref.xml");
  39. ExceptionTranslationFilter filter = (ExceptionTranslationFilter) context.getBean("exceptionTranslationFilter");
  40. AuthenticationProcessingFilterEntryPoint entryPoint = (AuthenticationProcessingFilterEntryPoint) filter
  41. .getAuthenticationEntryPoint();
  42. assertEquals("/acegilogin.jsp", entryPoint.getLoginFormUrl());
  43. assertFalse(entryPoint.getForceHttps());
  44. }
  45. public void testAutoDetectionOfDefaultDependencies() throws Exception {
  46. ApplicationContext context = new ClassPathXmlApplicationContext(
  47. "org/acegisecurity/config/exception-translation-autodetect-handler.xml");
  48. ExceptionTranslationFilter filter = (ExceptionTranslationFilter) context.getBean("exceptionTranslationFilter");
  49. Field field = makeAccessibleAndGetFieldByName(filter.getClass().getDeclaredFields(), "accessDeniedHandler");
  50. assertTrue(field.get(filter) instanceof AccessDeniedHandler);
  51. AccessDeniedHandlerImpl accessDeniedHandler = (AccessDeniedHandlerImpl) field
  52. .get(filter);
  53. Field f = makeAccessibleAndGetFieldByName(accessDeniedHandler.getClass().getDeclaredFields(), "errorPage");
  54. assertEquals("errorPage",f.getName());
  55. String value = (String) f.get(accessDeniedHandler);
  56. assertEquals("/accessDenied.jsp", value);
  57. }
  58. private Field makeAccessibleAndGetFieldByName(Field[] fields, String name) {
  59. Field field = null;
  60. for (int i = 0, n = fields.length; i < n; i++) {
  61. ReflectionUtils.makeAccessible(fields[i]);
  62. if (fields[i].getName().equals(name)) {
  63. return fields[i];
  64. }
  65. }
  66. return field;
  67. }
  68. }