浏览代码

SEC-1125: Created separate web module spring-security-web

Luke Taylor 16 年之前
父节点
当前提交
2a9a8a41db
共有 100 个文件被更改,包括 394 次插入346 次删除
  1. 0 4
      acl/pom.xml
  2. 1 5
      acl/src/test/java/org/springframework/security/acls/domain/PermissionTests.java
  3. 5 0
      cas/pom.xml
  4. 12 0
      config/pom.xml
  5. 1 1
      config/src/main/java/org/springframework/security/config/AnonymousBeanDefinitionParser.java
  6. 1 1
      config/src/main/java/org/springframework/security/config/ConfigUtils.java
  7. 3 3
      config/src/main/java/org/springframework/security/config/FilterChainProxyPostProcessor.java
  8. 2 2
      config/src/main/java/org/springframework/security/config/GlobalMethodSecurityBeanDefinitionParser.java
  9. 4 4
      config/src/main/java/org/springframework/security/config/HttpSecurityBeanDefinitionParser.java
  10. 2 2
      config/src/main/java/org/springframework/security/config/PortMappingsBeanDefinitionParser.java
  11. 12 13
      config/src/test/java/org/springframework/security/config/HttpSecurityBeanDefinitionParserTests.java
  12. 16 37
      config/src/test/java/org/springframework/security/util/FilterChainProxyConfigTests.java
  13. 9 9
      config/src/test/resources/org/springframework/security/util/filtertest-valid.xml
  14. 4 5
      core/pom.xml
  15. 5 3
      core/src/main/java/org/springframework/security/concurrent/SessionInformation.java
  16. 1 1
      core/src/main/java/org/springframework/security/context/InheritableThreadLocalSecurityContextHolderStrategy.java
  17. 2 2
      core/src/main/java/org/springframework/security/context/SecurityContextHolder.java
  18. 1 1
      core/src/main/java/org/springframework/security/context/ThreadLocalSecurityContextHolderStrategy.java
  19. 1 2
      core/src/main/java/org/springframework/security/context/package.html
  20. 18 0
      core/src/main/java/org/springframework/security/event/SessionCreationEvent.java
  21. 26 0
      core/src/main/java/org/springframework/security/event/SessionDestroyedEvent.java
  22. 3 9
      core/src/main/java/org/springframework/security/expression/MethodSecurityExpressionHandler.java
  23. 3 3
      core/src/main/java/org/springframework/security/expression/method/ExpressionAnnotationMethodSecurityMetadataSource.java
  24. 4 4
      core/src/main/java/org/springframework/security/expression/method/MethodExpressionAfterInvocationProvider.java
  25. 4 4
      core/src/main/java/org/springframework/security/expression/method/MethodExpressionVoter.java
  26. 3 14
      core/src/main/java/org/springframework/security/expression/support/DefaultMethodSecurityExpressionHandler.java
  27. 2 2
      core/src/main/java/org/springframework/security/expression/support/SecurityExpressionRoot.java
  28. 5 7
      core/src/main/java/org/springframework/security/providers/jaas/JaasAuthenticationProvider.java
  29. 1 1
      core/src/main/java/org/springframework/security/providers/preauth/PreAuthenticatedAuthenticationProvider.java
  30. 1 1
      core/src/main/java/org/springframework/security/remoting/httpinvoker/AuthenticationSimpleHttpInvokerRequestExecutor.java
  31. 0 0
      core/src/main/java/org/springframework/security/remoting/httpinvoker/package.html
  32. 1 1
      core/src/main/java/org/springframework/security/remoting/rmi/ContextPropagatingRemoteInvocation.java
  33. 1 1
      core/src/main/java/org/springframework/security/remoting/rmi/ContextPropagatingRemoteInvocationFactory.java
  34. 0 0
      core/src/main/java/org/springframework/security/remoting/rmi/package.html
  35. 0 50
      core/src/main/java/org/springframework/security/ui/session/HttpSessionApplicationEvent.java
  36. 1 2
      core/src/test/java/org/springframework/security/afterinvocation/AfterInvocationProviderManagerTests.java
  37. 6 8
      core/src/test/java/org/springframework/security/providers/ProviderManagerTests.java
  38. 6 6
      core/src/test/java/org/springframework/security/providers/jaas/JaasAuthenticationProviderTests.java
  39. 2 2
      core/src/test/java/org/springframework/security/remoting/httpinvoker/AuthenticationSimpleHttpInvokerRequestExecutorTests.java
  40. 3 1
      core/src/test/java/org/springframework/security/remoting/rmi/ContextPropagatingRemoteInvocationTests.java
  41. 0 56
      core/src/test/java/org/springframework/security/util/MockFilterChain.java
  42. 2 2
      itest/context/src/test/java/org/springframework/security/performance/FilterChainPerformanceTests.java
  43. 3 3
      itest/context/src/test/resources/filter-chain-performance-app-context.xml
  44. 0 4
      ldap/pom.xml
  45. 6 1
      ntlm/pom.xml
  46. 1 1
      openid/pom.xml
  47. 18 9
      openid/src/test/java/org/springframework/security/ui/openid/OpenIDAuthenticationProcessingFilterTests.java
  48. 7 7
      pom.xml
  49. 1 1
      portlet/src/test/java/org/springframework/security/ui/portlet/PortletProcessingInterceptorTests.java
  50. 1 1
      samples/contacts/src/main/webapp/WEB-INF/applicationContext-security.xml
  51. 1 1
      samples/contacts/src/test/resources/applicationContext-contacts-test.xml
  52. 8 8
      samples/dms/src/main/java/sample/dms/DocumentDaoImpl.java
  53. 2 6
      samples/dms/src/main/resources/applicationContext-dms-secure.xml
  54. 1 1
      samples/pom.xml
  55. 5 0
      sandbox/other/pom.xml
  56. 0 4
      taglibs/pom.xml
  57. 57 0
      web/pom.xml
  58. 1 1
      web/src/main/java/org/springframework/security/concurrent/ConcurrentSessionFilter.java
  59. 0 0
      web/src/main/java/org/springframework/security/concurrent/SessionRegistryImpl.java
  60. 6 0
      web/src/main/java/org/springframework/security/concurrent/package.html
  61. 1 1
      web/src/main/java/org/springframework/security/context/web/HttpRequestResponseHolder.java
  62. 4 1
      web/src/main/java/org/springframework/security/context/web/HttpSessionContextIntegrationFilter.java
  63. 5 1
      web/src/main/java/org/springframework/security/context/web/HttpSessionSecurityContextRepository.java
  64. 4 1
      web/src/main/java/org/springframework/security/context/web/SaveContextOnUpdateOrErrorResponseWrapper.java
  65. 3 1
      web/src/main/java/org/springframework/security/context/web/SecurityContextPersistenceFilter.java
  66. 4 2
      web/src/main/java/org/springframework/security/context/web/SecurityContextRepository.java
  67. 1 2
      web/src/main/java/org/springframework/security/expression/web/ExpressionBasedFilterInvocationSecurityMetadataSource.java
  68. 0 0
      web/src/main/java/org/springframework/security/expression/web/WebExpressionConfigAttribute.java
  69. 5 4
      web/src/main/java/org/springframework/security/expression/web/WebExpressionVoter.java
  70. 19 0
      web/src/main/java/org/springframework/security/expression/web/WebSecurityExpressionHandler.java
  71. 39 0
      web/src/main/java/org/springframework/security/expression/web/support/DefaultWebSecurityExpressionHandler.java
  72. 2 1
      web/src/main/java/org/springframework/security/expression/web/support/WebSecurityExpressionRoot.java
  73. 0 0
      web/src/main/java/org/springframework/security/intercept/web/DefaultFilterInvocationSecurityMetadataSource.java
  74. 2 2
      web/src/main/java/org/springframework/security/intercept/web/FilterInvocation.java
  75. 0 0
      web/src/main/java/org/springframework/security/intercept/web/FilterInvocationSecurityMetadataSource.java
  76. 0 0
      web/src/main/java/org/springframework/security/intercept/web/FilterSecurityInterceptor.java
  77. 0 0
      web/src/main/java/org/springframework/security/intercept/web/RequestKey.java
  78. 0 0
      web/src/main/java/org/springframework/security/intercept/web/WebInvocationPrivilegeEvaluator.java
  79. 0 0
      web/src/main/java/org/springframework/security/intercept/web/package.html
  80. 4 4
      web/src/main/java/org/springframework/security/securechannel/AbstractRetryEntryPoint.java
  81. 0 0
      web/src/main/java/org/springframework/security/securechannel/ChannelDecisionManager.java
  82. 0 0
      web/src/main/java/org/springframework/security/securechannel/ChannelDecisionManagerImpl.java
  83. 0 0
      web/src/main/java/org/springframework/security/securechannel/ChannelEntryPoint.java
  84. 0 0
      web/src/main/java/org/springframework/security/securechannel/ChannelProcessingFilter.java
  85. 0 0
      web/src/main/java/org/springframework/security/securechannel/ChannelProcessor.java
  86. 0 0
      web/src/main/java/org/springframework/security/securechannel/InsecureChannelProcessor.java
  87. 0 0
      web/src/main/java/org/springframework/security/securechannel/RetryWithHttpEntryPoint.java
  88. 0 0
      web/src/main/java/org/springframework/security/securechannel/RetryWithHttpsEntryPoint.java
  89. 0 0
      web/src/main/java/org/springframework/security/securechannel/SecureChannelProcessor.java
  90. 0 0
      web/src/main/java/org/springframework/security/securechannel/package.html
  91. 2 2
      web/src/main/java/org/springframework/security/ui/AbstractAuthenticationTargetUrlRequestHandler.java
  92. 2 2
      web/src/main/java/org/springframework/security/ui/AbstractProcessingFilter.java
  93. 0 0
      web/src/main/java/org/springframework/security/ui/AccessDeniedHandler.java
  94. 0 0
      web/src/main/java/org/springframework/security/ui/AccessDeniedHandlerImpl.java
  95. 0 0
      web/src/main/java/org/springframework/security/ui/AuthenticationEntryPoint.java
  96. 0 0
      web/src/main/java/org/springframework/security/ui/AuthenticationFailureHandler.java
  97. 0 0
      web/src/main/java/org/springframework/security/ui/AuthenticationSuccessHandler.java
  98. 2 2
      web/src/main/java/org/springframework/security/ui/ExceptionMappingAuthenticationFailureHandler.java
  99. 3 3
      web/src/main/java/org/springframework/security/ui/ExceptionTranslationFilter.java
  100. 0 0
      web/src/main/java/org/springframework/security/ui/FilterChainOrder.java

+ 0 - 4
acl/pom.xml

@@ -56,10 +56,6 @@
             <artifactId>hsqldb</artifactId>
             <artifactId>hsqldb</artifactId>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
-        <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-junit4</artifactId>
-        </dependency>
     </dependencies>
     </dependencies>
 
 
 </project>
 </project>

+ 1 - 5
acl/src/test/java/org/springframework/security/acls/domain/PermissionTests.java

@@ -14,9 +14,8 @@
  */
  */
 package org.springframework.security.acls.domain;
 package org.springframework.security.acls.domain;
 
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import static org.junit.Assert.*;
 import static org.junit.Assert.*;
+
 import org.junit.Test;
 import org.junit.Test;
 import org.springframework.security.acls.Permission;
 import org.springframework.security.acls.Permission;
 
 
@@ -28,9 +27,6 @@ import org.springframework.security.acls.Permission;
  * @version $Id${date}
  * @version $Id${date}
  */
  */
 public class PermissionTests {
 public class PermissionTests {
-    private static final Log LOGGER = LogFactory.getLog(PermissionTests.class);
-
-    //~ Methods ========================================================================================================
 
 
     @Test
     @Test
     public void basePermissionTest() {
     public void basePermissionTest() {

+ 5 - 0
cas/pom.xml

@@ -15,6 +15,11 @@
             <artifactId>spring-security-core</artifactId>
             <artifactId>spring-security-core</artifactId>
             <version>${project.version}</version>
             <version>${project.version}</version>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-web</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <dependency>
         <dependency>
             <groupId>org.springframework.security</groupId>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-core</artifactId>
             <artifactId>spring-security-core</artifactId>

+ 12 - 0
config/pom.xml

@@ -15,6 +15,18 @@
             <artifactId>spring-security-core</artifactId>
             <artifactId>spring-security-core</artifactId>
             <version>${project.version}</version>
             <version>${project.version}</version>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-web</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-web</artifactId>
+            <version>${project.version}</version>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
         <dependency>
         <dependency>
             <groupId>commons-logging</groupId>
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
             <artifactId>commons-logging</artifactId>

+ 1 - 1
config/src/main/java/org/springframework/security/config/AnonymousBeanDefinitionParser.java

@@ -9,7 +9,7 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
 import org.springframework.beans.factory.xml.BeanDefinitionParser;
 import org.springframework.beans.factory.xml.BeanDefinitionParser;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.security.providers.anonymous.AnonymousAuthenticationProvider;
 import org.springframework.security.providers.anonymous.AnonymousAuthenticationProvider;
-import org.springframework.security.providers.anonymous.AnonymousProcessingFilter;
+import org.springframework.security.ui.anonymous.AnonymousProcessingFilter;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 import org.w3c.dom.Element;
 import org.w3c.dom.Element;
 
 

+ 1 - 1
config/src/main/java/org/springframework/security/config/ConfigUtils.java

@@ -14,11 +14,11 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.security.afterinvocation.AfterInvocationProviderManager;
 import org.springframework.security.afterinvocation.AfterInvocationProviderManager;
 import org.springframework.security.expression.method.MethodExpressionVoter;
 import org.springframework.security.expression.method.MethodExpressionVoter;
-import org.springframework.security.util.UrlUtils;
 import org.springframework.security.vote.AccessDecisionVoter;
 import org.springframework.security.vote.AccessDecisionVoter;
 import org.springframework.security.vote.AffirmativeBased;
 import org.springframework.security.vote.AffirmativeBased;
 import org.springframework.security.vote.AuthenticatedVoter;
 import org.springframework.security.vote.AuthenticatedVoter;
 import org.springframework.security.vote.RoleVoter;
 import org.springframework.security.vote.RoleVoter;
+import org.springframework.security.web.util.UrlUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 import org.w3c.dom.Element;
 import org.w3c.dom.Element;
 
 

+ 3 - 3
config/src/main/java/org/springframework/security/config/FilterChainProxyPostProcessor.java

@@ -18,18 +18,18 @@ import org.springframework.core.OrderComparator;
 import org.springframework.core.Ordered;
 import org.springframework.core.Ordered;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.config.ConfigUtils.FilterChainList;
 import org.springframework.security.config.ConfigUtils.FilterChainList;
-import org.springframework.security.context.SecurityContextPersistenceFilter;
+import org.springframework.security.context.web.SecurityContextPersistenceFilter;
 import org.springframework.security.intercept.web.DefaultFilterInvocationSecurityMetadataSource;
 import org.springframework.security.intercept.web.DefaultFilterInvocationSecurityMetadataSource;
 import org.springframework.security.intercept.web.FilterSecurityInterceptor;
 import org.springframework.security.intercept.web.FilterSecurityInterceptor;
 import org.springframework.security.providers.anonymous.AnonymousAuthenticationToken;
 import org.springframework.security.providers.anonymous.AnonymousAuthenticationToken;
-import org.springframework.security.providers.anonymous.AnonymousProcessingFilter;
 import org.springframework.security.ui.ExceptionTranslationFilter;
 import org.springframework.security.ui.ExceptionTranslationFilter;
 import org.springframework.security.ui.SessionFixationProtectionFilter;
 import org.springframework.security.ui.SessionFixationProtectionFilter;
+import org.springframework.security.ui.anonymous.AnonymousProcessingFilter;
 import org.springframework.security.ui.basicauth.BasicProcessingFilter;
 import org.springframework.security.ui.basicauth.BasicProcessingFilter;
 import org.springframework.security.ui.webapp.AuthenticationProcessingFilter;
 import org.springframework.security.ui.webapp.AuthenticationProcessingFilter;
 import org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint;
 import org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint;
 import org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter;
 import org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter;
-import org.springframework.security.util.FilterChainProxy;
+import org.springframework.security.web.util.FilterChainProxy;
 import org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter;
 import org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter;
 
 
 /**
 /**

+ 2 - 2
config/src/main/java/org/springframework/security/config/GlobalMethodSecurityBeanDefinitionParser.java

@@ -20,7 +20,7 @@ import org.springframework.security.ConfigAttribute;
 import org.springframework.security.SecurityConfig;
 import org.springframework.security.SecurityConfig;
 import org.springframework.security.expression.method.MethodExpressionAfterInvocationProvider;
 import org.springframework.security.expression.method.MethodExpressionAfterInvocationProvider;
 import org.springframework.security.expression.method.MethodExpressionVoter;
 import org.springframework.security.expression.method.MethodExpressionVoter;
-import org.springframework.security.expression.support.DefaultSecurityExpressionHandler;
+import org.springframework.security.expression.support.DefaultMethodSecurityExpressionHandler;
 import org.springframework.security.intercept.method.DelegatingMethodSecurityMetadataSource;
 import org.springframework.security.intercept.method.DelegatingMethodSecurityMetadataSource;
 import org.springframework.security.intercept.method.MapBasedMethodSecurityMetadataSource;
 import org.springframework.security.intercept.method.MapBasedMethodSecurityMetadataSource;
 import org.springframework.security.intercept.method.ProtectPointcutPostProcessor;
 import org.springframework.security.intercept.method.ProtectPointcutPostProcessor;
@@ -95,7 +95,7 @@ class GlobalMethodSecurityBeanDefinitionParser implements BeanDefinitionParser {
             if (StringUtils.hasText(expressionHandlerRef)) {
             if (StringUtils.hasText(expressionHandlerRef)) {
                 logger.info("Using bean '" + expressionHandlerRef + "' as method SecurityExpressionHandler implementation");
                 logger.info("Using bean '" + expressionHandlerRef + "' as method SecurityExpressionHandler implementation");
             } else {
             } else {
-                parserContext.getRegistry().registerBeanDefinition(EXPRESSION_HANDLER_ID, new RootBeanDefinition(DefaultSecurityExpressionHandler.class));
+                parserContext.getRegistry().registerBeanDefinition(EXPRESSION_HANDLER_ID, new RootBeanDefinition(DefaultMethodSecurityExpressionHandler.class));
                 logger.warn("Expressions were enabled for method security but no SecurityExpressionHandler was configured. " +
                 logger.warn("Expressions were enabled for method security but no SecurityExpressionHandler was configured. " +
                         "All hasPermision() expressions will evaluate to false.");
                         "All hasPermision() expressions will evaluate to false.");
                 expressionHandlerRef = EXPRESSION_HANDLER_ID;
                 expressionHandlerRef = EXPRESSION_HANDLER_ID;

+ 4 - 4
config/src/main/java/org/springframework/security/config/HttpSecurityBeanDefinitionParser.java

@@ -19,8 +19,8 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttributeEditor;
 import org.springframework.security.ConfigAttributeEditor;
 import org.springframework.security.SecurityConfig;
 import org.springframework.security.SecurityConfig;
-import org.springframework.security.context.HttpSessionSecurityContextRepository;
-import org.springframework.security.context.SecurityContextPersistenceFilter;
+import org.springframework.security.context.web.HttpSessionSecurityContextRepository;
+import org.springframework.security.context.web.SecurityContextPersistenceFilter;
 import org.springframework.security.expression.web.WebExpressionVoter;
 import org.springframework.security.expression.web.WebExpressionVoter;
 import org.springframework.security.intercept.web.DefaultFilterInvocationSecurityMetadataSource;
 import org.springframework.security.intercept.web.DefaultFilterInvocationSecurityMetadataSource;
 import org.springframework.security.intercept.web.FilterSecurityInterceptor;
 import org.springframework.security.intercept.web.FilterSecurityInterceptor;
@@ -36,12 +36,12 @@ import org.springframework.security.ui.ExceptionTranslationFilter;
 import org.springframework.security.ui.SessionFixationProtectionFilter;
 import org.springframework.security.ui.SessionFixationProtectionFilter;
 import org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter;
 import org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter;
 import org.springframework.security.util.AntUrlPathMatcher;
 import org.springframework.security.util.AntUrlPathMatcher;
-import org.springframework.security.util.FilterChainProxy;
 import org.springframework.security.util.RegexUrlPathMatcher;
 import org.springframework.security.util.RegexUrlPathMatcher;
 import org.springframework.security.util.UrlMatcher;
 import org.springframework.security.util.UrlMatcher;
 import org.springframework.security.vote.AccessDecisionVoter;
 import org.springframework.security.vote.AccessDecisionVoter;
 import org.springframework.security.vote.AuthenticatedVoter;
 import org.springframework.security.vote.AuthenticatedVoter;
 import org.springframework.security.vote.RoleVoter;
 import org.springframework.security.vote.RoleVoter;
+import org.springframework.security.web.util.FilterChainProxy;
 import org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter;
 import org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.util.xml.DomUtils;
 import org.springframework.util.xml.DomUtils;
@@ -107,7 +107,7 @@ public class HttpSecurityBeanDefinitionParser implements BeanDefinitionParser {
     private static final String ATT_DISABLE_URL_REWRITING = "disable-url-rewriting";
     private static final String ATT_DISABLE_URL_REWRITING = "disable-url-rewriting";
 
 
     private static final String EXPRESSION_FIDS_CLASS = "org.springframework.security.expression.web.ExpressionBasedFilterInvocationSecurityMetadataSource";
     private static final String EXPRESSION_FIDS_CLASS = "org.springframework.security.expression.web.ExpressionBasedFilterInvocationSecurityMetadataSource";
-    private static final String EXPRESSION_HANDLER_CLASS = "org.springframework.security.expression.support.DefaultSecurityExpressionHandler";
+    private static final String EXPRESSION_HANDLER_CLASS = "org.springframework.security.expression.web.support.DefaultWebSecurityExpressionHandler";
     private static final String EXPRESSION_HANDLER_ID = "_webExpressionHandler";
     private static final String EXPRESSION_HANDLER_ID = "_webExpressionHandler";
 
 
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")

+ 2 - 2
config/src/main/java/org/springframework/security/config/PortMappingsBeanDefinitionParser.java

@@ -1,6 +1,6 @@
 package org.springframework.security.config;
 package org.springframework.security.config;
 
 
-import org.springframework.security.util.PortMapperImpl;
+import org.springframework.security.web.util.PortMapperImpl;
 import org.springframework.beans.factory.xml.BeanDefinitionParser;
 import org.springframework.beans.factory.xml.BeanDefinitionParser;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.BeanDefinition;
@@ -15,7 +15,7 @@ import java.util.Map;
 import java.util.HashMap;
 import java.util.HashMap;
 
 
 /**
 /**
- * Parses a port-mappings element, producing a single {@link org.springframework.security.util.PortMapperImpl}
+ * Parses a port-mappings element, producing a single {@link org.springframework.security.web.util.PortMapperImpl}
  * bean.
  * bean.
  *
  *
  * @author Luke Taylor
  * @author Luke Taylor

+ 12 - 13
config/src/test/java/org/springframework/security/config/HttpSecurityBeanDefinitionParserTests.java

@@ -26,21 +26,21 @@ import org.springframework.security.concurrent.ConcurrentLoginException;
 import org.springframework.security.concurrent.ConcurrentSessionControllerImpl;
 import org.springframework.security.concurrent.ConcurrentSessionControllerImpl;
 import org.springframework.security.concurrent.ConcurrentSessionFilter;
 import org.springframework.security.concurrent.ConcurrentSessionFilter;
 import org.springframework.security.config.util.InMemoryXmlApplicationContext;
 import org.springframework.security.config.util.InMemoryXmlApplicationContext;
-import org.springframework.security.context.HttpSessionSecurityContextRepository;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.context.SecurityContextHolder;
-import org.springframework.security.context.SecurityContextPersistenceFilter;
+import org.springframework.security.context.web.HttpSessionSecurityContextRepository;
+import org.springframework.security.context.web.SecurityContextPersistenceFilter;
 import org.springframework.security.intercept.web.FilterInvocation;
 import org.springframework.security.intercept.web.FilterInvocation;
 import org.springframework.security.intercept.web.FilterInvocationSecurityMetadataSource;
 import org.springframework.security.intercept.web.FilterInvocationSecurityMetadataSource;
 import org.springframework.security.intercept.web.FilterSecurityInterceptor;
 import org.springframework.security.intercept.web.FilterSecurityInterceptor;
 import org.springframework.security.providers.TestingAuthenticationToken;
 import org.springframework.security.providers.TestingAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
-import org.springframework.security.providers.anonymous.AnonymousProcessingFilter;
 import org.springframework.security.securechannel.ChannelProcessingFilter;
 import org.springframework.security.securechannel.ChannelProcessingFilter;
 import org.springframework.security.ui.AuthenticationFailureHandler;
 import org.springframework.security.ui.AuthenticationFailureHandler;
 import org.springframework.security.ui.AuthenticationSuccessHandler;
 import org.springframework.security.ui.AuthenticationSuccessHandler;
 import org.springframework.security.ui.ExceptionTranslationFilter;
 import org.springframework.security.ui.ExceptionTranslationFilter;
 import org.springframework.security.ui.SessionFixationProtectionFilter;
 import org.springframework.security.ui.SessionFixationProtectionFilter;
 import org.springframework.security.ui.WebAuthenticationDetails;
 import org.springframework.security.ui.WebAuthenticationDetails;
+import org.springframework.security.ui.anonymous.AnonymousProcessingFilter;
 import org.springframework.security.ui.basicauth.BasicProcessingFilter;
 import org.springframework.security.ui.basicauth.BasicProcessingFilter;
 import org.springframework.security.ui.logout.LogoutFilter;
 import org.springframework.security.ui.logout.LogoutFilter;
 import org.springframework.security.ui.logout.LogoutHandler;
 import org.springframework.security.ui.logout.LogoutHandler;
@@ -49,9 +49,8 @@ import org.springframework.security.ui.rememberme.PersistentTokenBasedRememberMe
 import org.springframework.security.ui.webapp.AuthenticationProcessingFilter;
 import org.springframework.security.ui.webapp.AuthenticationProcessingFilter;
 import org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter;
 import org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter;
 import org.springframework.security.util.FieldUtils;
 import org.springframework.security.util.FieldUtils;
-import org.springframework.security.util.FilterChainProxy;
-import org.springframework.security.util.MockFilter;
-import org.springframework.security.util.PortMapperImpl;
+import org.springframework.security.web.util.FilterChainProxy;
+import org.springframework.security.web.util.PortMapperImpl;
 import org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter;
 import org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter;
 import org.springframework.util.ReflectionUtils;
 import org.springframework.util.ReflectionUtils;
 
 
@@ -341,20 +340,20 @@ public class HttpSecurityBeanDefinitionParserTests {
                 "<b:bean id='userFilter' class='org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter'>" +
                 "<b:bean id='userFilter' class='org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter'>" +
                 "    <custom-filter after='LOGOUT_FILTER'/>" +
                 "    <custom-filter after='LOGOUT_FILTER'/>" +
                 "</b:bean>" +
                 "</b:bean>" +
-                "<b:bean id='userFilter1' class='org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter'>" +
+                "<b:bean id='userFilter1' class='org.springframework.security.context.web.SecurityContextPersistenceFilter'>" +
                 "    <custom-filter before='SESSION_CONTEXT_INTEGRATION_FILTER'/>" +
                 "    <custom-filter before='SESSION_CONTEXT_INTEGRATION_FILTER'/>" +
                 "</b:bean>" +
                 "</b:bean>" +
-                "<b:bean id='userFilter2' class='org.springframework.security.util.MockFilter'>" +
+                "<b:bean id='userFilter2' class='org.springframework.security.context.web.SecurityContextPersistenceFilter'>" +
                 "    <custom-filter position='FIRST'/>" +
                 "    <custom-filter position='FIRST'/>" +
                 "</b:bean>" +
                 "</b:bean>" +
-                "<b:bean id='userFilter3' class='org.springframework.security.util.MockFilter'/>" +
+                "<b:bean id='userFilter3' class='org.springframework.security.context.web.SecurityContextPersistenceFilter'/>" +
                 "<b:bean id='userFilter4' class='org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter'/>"
                 "<b:bean id='userFilter4' class='org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter'/>"
                 );
                 );
         List<Filter> filters = getFilters("/someurl");
         List<Filter> filters = getFilters("/someurl");
 
 
         assertEquals(AUTO_CONFIG_FILTERS + 3, filters.size());
         assertEquals(AUTO_CONFIG_FILTERS + 3, filters.size());
-        assertTrue(filters.get(0) instanceof MockFilter);
-        assertTrue(filters.get(1) instanceof SecurityContextHolderAwareRequestFilter);
+        assertTrue(filters.get(0) instanceof SecurityContextPersistenceFilter);
+        assertTrue(filters.get(1) instanceof SecurityContextPersistenceFilter);
         assertTrue(filters.get(4) instanceof SecurityContextHolderAwareRequestFilter);
         assertTrue(filters.get(4) instanceof SecurityContextHolderAwareRequestFilter);
     }
     }
 
 
@@ -694,7 +693,7 @@ public class HttpSecurityBeanDefinitionParserTests {
     @Test
     @Test
     public void supportsExternallyDefinedSecurityContextRepository() throws Exception {
     public void supportsExternallyDefinedSecurityContextRepository() throws Exception {
         setContext(
         setContext(
-                "<b:bean id='repo' class='org.springframework.security.context.HttpSessionSecurityContextRepository'/>" +
+                "<b:bean id='repo' class='org.springframework.security.context.web.HttpSessionSecurityContextRepository'/>" +
                 "<http create-session='always' security-context-repository-ref='repo'>" +
                 "<http create-session='always' security-context-repository-ref='repo'>" +
                 "    <http-basic />" +
                 "    <http-basic />" +
                 "</http>" + AUTH_PROVIDER_XML);
                 "</http>" + AUTH_PROVIDER_XML);
@@ -707,7 +706,7 @@ public class HttpSecurityBeanDefinitionParserTests {
     @Test(expected=BeanDefinitionParsingException.class)
     @Test(expected=BeanDefinitionParsingException.class)
     public void cantUseUnsupportedSessionCreationAttributeWithExternallyDefinedSecurityContextRepository() throws Exception {
     public void cantUseUnsupportedSessionCreationAttributeWithExternallyDefinedSecurityContextRepository() throws Exception {
         setContext(
         setContext(
-                "<b:bean id='repo' class='org.springframework.security.context.HttpSessionSecurityContextRepository'/>" +
+                "<b:bean id='repo' class='org.springframework.security.context.web.HttpSessionSecurityContextRepository'/>" +
                 "<http create-session='never' security-context-repository-ref='repo'>" +
                 "<http create-session='never' security-context-repository-ref='repo'>" +
                 "    <http-basic />" +
                 "    <http-basic />" +
                 "</http>" + AUTH_PROVIDER_XML);
                 "</http>" + AUTH_PROVIDER_XML);

+ 16 - 37
config/src/test/java/org/springframework/security/util/FilterChainProxyConfigTests.java

@@ -16,10 +16,15 @@
 package org.springframework.security.util;
 package org.springframework.security.util;
 
 
 import static org.junit.Assert.*;
 import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
+import static org.mockito.Matchers.*;
 
 
 import java.util.List;
 import java.util.List;
 
 
 import javax.servlet.Filter;
 import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 
 import org.junit.After;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Before;
@@ -29,8 +34,10 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.security.MockFilterConfig;
 import org.springframework.security.MockFilterConfig;
-import org.springframework.security.context.SecurityContextPersistenceFilter;
+import org.springframework.security.context.web.SecurityContextPersistenceFilter;
 import org.springframework.security.ui.webapp.AuthenticationProcessingFilter;
 import org.springframework.security.ui.webapp.AuthenticationProcessingFilter;
+import org.springframework.security.web.util.FilterChainProxy;
+import org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter;
 
 
 /**
 /**
  * Tests {@link FilterChainProxy}.
  * Tests {@link FilterChainProxy}.
@@ -56,23 +63,6 @@ public class FilterChainProxyConfigTests {
         }
         }
     }
     }
 
 
-    @Test
-    public void testDoNotFilter() throws Exception {
-        FilterChainProxy filterChainProxy = (FilterChainProxy) appCtx.getBean("filterChain", FilterChainProxy.class);
-        MockFilter filter = (MockFilter) appCtx.getBean("mockFilter", MockFilter.class);
-
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        request.setServletPath("/do/not/filter/somefile.html");
-
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        MockFilterChain chain = new MockFilterChain(true);
-
-        filterChainProxy.doFilter(request, response, chain);
-        assertFalse(filter.isWasInitialized());
-        assertFalse(filter.isWasDoFiltered());
-        assertFalse(filter.isWasDestroyed());
-    }
-
     @Test(expected=BeanCreationException.class)
     @Test(expected=BeanCreationException.class)
     public void misplacedUniversalPathShouldBeDetected() throws Exception {
     public void misplacedUniversalPathShouldBeDetected() throws Exception {
         appCtx.getBean("newFilterChainProxyWrongPathOrder", FilterChainProxy.class);
         appCtx.getBean("newFilterChainProxyWrongPathOrder", FilterChainProxy.class);
@@ -126,14 +116,14 @@ public class FilterChainProxyConfigTests {
     private void checkPathAndFilterOrder(FilterChainProxy filterChainProxy) throws Exception {
     private void checkPathAndFilterOrder(FilterChainProxy filterChainProxy) throws Exception {
         List<Filter> filters = filterChainProxy.getFilters("/foo/blah");
         List<Filter> filters = filterChainProxy.getFilters("/foo/blah");
         assertEquals(1, filters.size());
         assertEquals(1, filters.size());
-        assertTrue(filters.get(0) instanceof MockFilter);
+        assertTrue(filters.get(0) instanceof SecurityContextHolderAwareRequestFilter);
 
 
         filters = filterChainProxy.getFilters("/some/other/path/blah");
         filters = filterChainProxy.getFilters("/some/other/path/blah");
         assertNotNull(filters);
         assertNotNull(filters);
         assertEquals(3, filters.size());
         assertEquals(3, filters.size());
         assertTrue(filters.get(0) instanceof SecurityContextPersistenceFilter);
         assertTrue(filters.get(0) instanceof SecurityContextPersistenceFilter);
-        assertTrue(filters.get(1) instanceof MockFilter);
-        assertTrue(filters.get(2) instanceof MockFilter);
+        assertTrue(filters.get(1) instanceof SecurityContextHolderAwareRequestFilter);
+        assertTrue(filters.get(2) instanceof SecurityContextHolderAwareRequestFilter);
 
 
         filters = filterChainProxy.getFilters("/do/not/filter");
         filters = filterChainProxy.getFilters("/do/not/filter");
         assertEquals(0, filters.size());
         assertEquals(0, filters.size());
@@ -142,37 +132,26 @@ public class FilterChainProxyConfigTests {
         assertEquals(3, filters.size());
         assertEquals(3, filters.size());
         assertTrue(filters.get(0) instanceof SecurityContextPersistenceFilter);
         assertTrue(filters.get(0) instanceof SecurityContextPersistenceFilter);
         assertTrue(filters.get(1) instanceof AuthenticationProcessingFilter);
         assertTrue(filters.get(1) instanceof AuthenticationProcessingFilter);
-        assertTrue(filters.get(2) instanceof MockFilter);
+        assertTrue(filters.get(2) instanceof SecurityContextHolderAwareRequestFilter);
     }
     }
 
 
     private void doNormalOperation(FilterChainProxy filterChainProxy) throws Exception {
     private void doNormalOperation(FilterChainProxy filterChainProxy) throws Exception {
-        MockFilter filter = (MockFilter) appCtx.getBean("mockFilter", MockFilter.class);
-        assertFalse(filter.isWasInitialized());
-        assertFalse(filter.isWasDoFiltered());
-        assertFalse(filter.isWasDestroyed());
-
         filterChainProxy.init(new MockFilterConfig());
         filterChainProxy.init(new MockFilterConfig());
-        assertTrue(filter.isWasInitialized());
-        assertFalse(filter.isWasDoFiltered());
-        assertFalse(filter.isWasDestroyed());
 
 
         MockHttpServletRequest request = new MockHttpServletRequest();
         MockHttpServletRequest request = new MockHttpServletRequest();
         request.setServletPath("/foo/secure/super/somefile.html");
         request.setServletPath("/foo/secure/super/somefile.html");
 
 
         MockHttpServletResponse response = new MockHttpServletResponse();
         MockHttpServletResponse response = new MockHttpServletResponse();
-        MockFilterChain chain = new MockFilterChain(true);
+        FilterChain chain = mock(FilterChain.class);
 
 
         filterChainProxy.doFilter(request, response, chain);
         filterChainProxy.doFilter(request, response, chain);
-        assertTrue(filter.isWasInitialized());
-        assertTrue(filter.isWasDoFiltered());
-        assertFalse(filter.isWasDestroyed());
+        verify(chain).doFilter(any(HttpServletRequest.class), any(HttpServletResponse.class));
 
 
         request.setServletPath("/a/path/which/doesnt/match/any/filter.html");
         request.setServletPath("/a/path/which/doesnt/match/any/filter.html");
+        chain = mock(FilterChain.class);
         filterChainProxy.doFilter(request, response, chain);
         filterChainProxy.doFilter(request, response, chain);
+        verify(chain).doFilter(any(HttpServletRequest.class), any(HttpServletResponse.class));
 
 
         filterChainProxy.destroy();
         filterChainProxy.destroy();
-        assertTrue(filter.isWasInitialized());
-        assertTrue(filter.isWasDoFiltered());
-        assertTrue(filter.isWasDestroyed());
     }
     }
 }
 }

+ 9 - 9
config/src/test/resources/org/springframework/security/util/filtertest-valid.xml

@@ -24,12 +24,12 @@
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
 http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">
 http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">
 
 
-    <bean id="mockFilter" class="org.springframework.security.util.MockFilter"/>
+    <bean id="mockFilter" class="org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter"/>
 
 
-    <bean id="mockFilter2" class="org.springframework.security.util.MockFilter"/>
+    <bean id="mockFilter2" class="org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter"/>
 
 
     <!-- These are just here so we have filters of a specific type to check the ordering is as expected -->
     <!-- These are just here so we have filters of a specific type to check the ordering is as expected -->
-    <bean id="sif" class="org.springframework.security.context.SecurityContextPersistenceFilter"/>
+    <bean id="sif" class="org.springframework.security.context.web.SecurityContextPersistenceFilter"/>
 
 
     <bean id="apf" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
     <bean id="apf" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
        <property name="authenticationManager">
        <property name="authenticationManager">
@@ -39,7 +39,7 @@ http://www.springframework.org/schema/security http://www.springframework.org/sc
 
 
     <bean id="mockNotAFilter" class="org.springframework.security.util.MockNotAFilter"/>
     <bean id="mockNotAFilter" class="org.springframework.security.util.MockNotAFilter"/>
 
 
-    <bean id="filterChain" class="org.springframework.security.util.FilterChainProxy">
+    <bean id="filterChain" class="org.springframework.security.web.util.FilterChainProxy">
         <sec:filter-chain-map path-type="ant">
         <sec:filter-chain-map path-type="ant">
             <sec:filter-chain pattern="/foo/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/foo/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/some/other/path/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/some/other/path/**" filters="mockFilter"/>
@@ -48,7 +48,7 @@ http://www.springframework.org/schema/security http://www.springframework.org/sc
     </bean>
     </bean>
 
 
 <!-- TODO: Refactor to replace the above (SEC-1034: 'new' is now the only valid syntax) -->
 <!-- TODO: Refactor to replace the above (SEC-1034: 'new' is now the only valid syntax) -->
-    <bean id="newFilterChainProxy" class="org.springframework.security.util.FilterChainProxy">
+    <bean id="newFilterChainProxy" class="org.springframework.security.web.util.FilterChainProxy">
         <sec:filter-chain-map path-type="ant">
         <sec:filter-chain-map path-type="ant">
             <sec:filter-chain pattern="/foo/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/foo/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/some/other/path/**" filters="sif,mockFilter,mockFilter2"/>
             <sec:filter-chain pattern="/some/other/path/**" filters="sif,mockFilter,mockFilter2"/>
@@ -57,14 +57,14 @@ http://www.springframework.org/schema/security http://www.springframework.org/sc
         </sec:filter-chain-map>
         </sec:filter-chain-map>
     </bean>
     </bean>
 
 
-    <bean id="newFilterChainProxyNoDefaultPath" class="org.springframework.security.util.FilterChainProxy">
+    <bean id="newFilterChainProxyNoDefaultPath" class="org.springframework.security.web.util.FilterChainProxy">
         <sec:filter-chain-map path-type="ant">
         <sec:filter-chain-map path-type="ant">
             <sec:filter-chain pattern="/foo/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/foo/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/*.bar" filters="mockFilter,mockFilter2"/>
             <sec:filter-chain pattern="/*.bar" filters="mockFilter,mockFilter2"/>
         </sec:filter-chain-map>
         </sec:filter-chain-map>
     </bean>
     </bean>
 
 
-    <bean id="newFilterChainProxyWrongPathOrder" class="org.springframework.security.util.FilterChainProxy">
+    <bean id="newFilterChainProxyWrongPathOrder" class="org.springframework.security.web.util.FilterChainProxy">
         <sec:filter-chain-map path-type="ant">
         <sec:filter-chain-map path-type="ant">
             <sec:filter-chain pattern="/foo/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/foo/**" filters="mockFilter"/>
             <sec:filter-chain pattern="/**" filters="sif,apf,mockFilter"/>
             <sec:filter-chain pattern="/**" filters="sif,apf,mockFilter"/>
@@ -72,7 +72,7 @@ http://www.springframework.org/schema/security http://www.springframework.org/sc
         </sec:filter-chain-map>
         </sec:filter-chain-map>
     </bean>
     </bean>
 
 
-    <bean id="newFilterChainProxyRegex" class="org.springframework.security.util.FilterChainProxy">
+    <bean id="newFilterChainProxyRegex" class="org.springframework.security.web.util.FilterChainProxy">
         <sec:filter-chain-map path-type="regex">
         <sec:filter-chain-map path-type="regex">
             <sec:filter-chain pattern="\A/foo/.*\Z" filters="mockFilter"/>
             <sec:filter-chain pattern="\A/foo/.*\Z" filters="mockFilter"/>
             <sec:filter-chain pattern="\A/s[oO]me/other/path/.*\Z" filters="sif,mockFilter,mockFilter2"/>
             <sec:filter-chain pattern="\A/s[oO]me/other/path/.*\Z" filters="sif,mockFilter,mockFilter2"/>
@@ -81,7 +81,7 @@ http://www.springframework.org/schema/security http://www.springframework.org/sc
         </sec:filter-chain-map>
         </sec:filter-chain-map>
     </bean>
     </bean>
 
 
-    <bean id="newFilterChainProxyNonNamespace" class="org.springframework.security.util.FilterChainProxy">
+    <bean id="newFilterChainProxyNonNamespace" class="org.springframework.security.web.util.FilterChainProxy">
         <property name="matcher">
         <property name="matcher">
             <bean class="org.springframework.security.util.AntUrlPathMatcher"/>
             <bean class="org.springframework.security.util.AntUrlPathMatcher"/>
         </property>
         </property>

+ 4 - 5
core/pom.xml

@@ -61,7 +61,7 @@
         <dependency>
         <dependency>
             <groupId>cglib</groupId>
             <groupId>cglib</groupId>
             <artifactId>cglib-nodep</artifactId>
             <artifactId>cglib-nodep</artifactId>
-            <scope>test</scope>
+            <scope>runtime</scope>
             <optional>true</optional>
             <optional>true</optional>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
@@ -86,16 +86,19 @@
             <artifactId>hsqldb</artifactId>
             <artifactId>hsqldb</artifactId>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
+
         <dependency>
         <dependency>
             <groupId>jaxen</groupId>
             <groupId>jaxen</groupId>
             <artifactId>jaxen</artifactId>
             <artifactId>jaxen</artifactId>
             <version>1.1.1</version>
             <version>1.1.1</version>
             <optional>true</optional>
             <optional>true</optional>
         </dependency>
         </dependency>
+<!--
         <dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
             <artifactId>servlet-api</artifactId>
         </dependency>
         </dependency>
+ -->
         <dependency>
         <dependency>
             <groupId>org.apache.tomcat</groupId>
             <groupId>org.apache.tomcat</groupId>
             <artifactId>annotations-api</artifactId>
             <artifactId>annotations-api</artifactId>
@@ -110,10 +113,6 @@
             <optional>true</optional>
             <optional>true</optional>
         </dependency>
         </dependency>
  -->
  -->
-        <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-junit4</artifactId>
-        </dependency>
         <dependency>
         <dependency>
             <groupId>log4j</groupId>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
             <artifactId>log4j</artifactId>

+ 5 - 3
core/src/main/java/org/springframework/security/concurrent/SessionInformation.java

@@ -23,12 +23,14 @@ import java.io.Serializable;
 
 
 /**
 /**
  * Represents a record of a session within the Spring Security framework.
  * Represents a record of a session within the Spring Security framework.
- * <p>This is primarily used for concurrent session support.</p>
- * <p>Sessions have three states: active, expired, and destroyed. A session can that is invalidated by
+ * <p>
+ * This is primarily used for concurrent session support.
+ * <p>
+ * Sessions have three states: active, expired, and destroyed. A session can that is invalidated by
  * <code>session.invalidate()</code> or via Servlet Container management is considered "destroyed". An "expired"
  * <code>session.invalidate()</code> or via Servlet Container management is considered "destroyed". An "expired"
  * session, on the other hand, is a session that Spring Security wants to end because it was selected for removal for
  * session, on the other hand, is a session that Spring Security wants to end because it was selected for removal for
  * some reason (generally as it was the least recently used session and the maximum sessions for the user were
  * some reason (generally as it was the least recently used session and the maximum sessions for the user were
- * reached). An "expired" session is removed as soon as possible by a <code>Filter</code>.</p>
+ * reached). An "expired" session is removed as soon as possible by a <code>Filter</code>.
  *
  *
  * @author Ben Alex
  * @author Ben Alex
  * @version $Id$
  * @version $Id$

+ 1 - 1
core/src/main/java/org/springframework/security/context/InheritableThreadLocalSecurityContextHolderStrategy.java

@@ -26,7 +26,7 @@ import org.springframework.util.Assert;
  * @version $Id$
  * @version $Id$
  *
  *
  * @see java.lang.ThreadLocal
  * @see java.lang.ThreadLocal
- * @see org.springframework.security.context.SecurityContextPersistenceFilter
+ * @see org.springframework.security.context.web.SecurityContextPersistenceFilter
  */
  */
 public class InheritableThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy {
 public class InheritableThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy {
     //~ Static fields/initializers =====================================================================================
     //~ Static fields/initializers =====================================================================================

+ 2 - 2
core/src/main/java/org/springframework/security/context/SecurityContextHolder.java

@@ -43,7 +43,7 @@ import java.lang.reflect.Constructor;
  * @author Ben Alex
  * @author Ben Alex
  * @version $Id$
  * @version $Id$
  *
  *
- * @see org.springframework.security.context.HttpSessionContextIntegrationFilter
+ * @see org.springframework.security.context.web.HttpSessionContextIntegrationFilter
  */
  */
 public class SecurityContextHolder {
 public class SecurityContextHolder {
     //~ Static fields/initializers =====================================================================================
     //~ Static fields/initializers =====================================================================================
@@ -138,7 +138,7 @@ public class SecurityContextHolder {
     /**
     /**
      * Delegates the creation of a new, empty context to the configured strategy.
      * Delegates the creation of a new, empty context to the configured strategy.
      */
      */
-    static SecurityContext createEmptyContext() {
+    public static SecurityContext createEmptyContext() {
         return strategy.createEmptyContext();
         return strategy.createEmptyContext();
     }
     }
 
 

+ 1 - 1
core/src/main/java/org/springframework/security/context/ThreadLocalSecurityContextHolderStrategy.java

@@ -25,7 +25,7 @@ import org.springframework.util.Assert;
  * @version $Id$
  * @version $Id$
  *
  *
  * @see java.lang.ThreadLocal
  * @see java.lang.ThreadLocal
- * @see org.springframework.security.context.SecurityContextPersistenceFilter
+ * @see org.springframework.security.context.web.SecurityContextPersistenceFilter
  */
  */
 public class ThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy {
 public class ThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy {
     //~ Static fields/initializers =====================================================================================
     //~ Static fields/initializers =====================================================================================

+ 1 - 2
core/src/main/java/org/springframework/security/context/package.html

@@ -1,8 +1,7 @@
 <html>
 <html>
 <body>
 <body>
 Classes related to the establishment of a security context for the duration of a request (such as
 Classes related to the establishment of a security context for the duration of a request (such as
-an HTTP or RMI invocation) and for the maintenance of the context between requests (by storing it in an HTTP sessio, for
-example).
+an HTTP or RMI invocation).
 <p>
 <p>
 A security context is associated with the current execution thread for the duration of the request, making the
 A security context is associated with the current execution thread for the duration of the request, making the
 authentication information it contains available throughout all the layers of an application.
 authentication information it contains available throughout all the layers of an application.

+ 18 - 0
core/src/main/java/org/springframework/security/event/SessionCreationEvent.java

@@ -0,0 +1,18 @@
+package org.springframework.security.event;
+
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * Generic session creation event which indicates that a session (potentially
+ * represented by a security context) has begun.
+ *
+ * @author Luke Taylor
+ * @version $Id$
+ * @since 2.5
+ */
+public abstract class SessionCreationEvent extends ApplicationEvent {
+
+    public SessionCreationEvent(Object source) {
+        super(source);
+    }
+}

+ 26 - 0
core/src/main/java/org/springframework/security/event/SessionDestroyedEvent.java

@@ -0,0 +1,26 @@
+package org.springframework.security.event;
+
+import org.springframework.context.ApplicationEvent;
+import org.springframework.security.context.SecurityContext;
+
+/**
+ * Generic "session termination" event which indicates that a session (potentially
+ * represented by a security context) has ended.
+ *
+ * @author Luke Taylor
+ * @version $Id$
+ * @since 2.5
+ */
+public abstract class SessionDestroyedEvent extends ApplicationEvent {
+
+    public SessionDestroyedEvent(Object source) {
+        super(source);
+    }
+
+    /**
+     * Provides the <tt>SecurityContext</tt> under which the session was running.
+     *
+     * @return the <tt>SecurityContext</tt> associated with the session, or null if there is no context.
+     */
+    public abstract SecurityContext getSecurityContext();
+}

+ 3 - 9
core/src/main/java/org/springframework/security/expression/SecurityExpressionHandler.java → core/src/main/java/org/springframework/security/expression/MethodSecurityExpressionHandler.java

@@ -5,17 +5,16 @@ import org.springframework.expression.EvaluationContext;
 import org.springframework.expression.Expression;
 import org.springframework.expression.Expression;
 import org.springframework.expression.ExpressionParser;
 import org.springframework.expression.ExpressionParser;
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
-import org.springframework.security.intercept.web.FilterInvocation;
 
 
 /**
 /**
- * Facade which isolates Spring Security's requirements from the implementation of the underlying
- * expression objects.
+ * Facade which isolates Spring Security's requirements for evaluation method-security expressions
+ * from the implementation of the underlying expression objects.
  *
  *
  * @author Luke Taylor
  * @author Luke Taylor
  * @version $Id$
  * @version $Id$
  * @since 2.5
  * @since 2.5
  */
  */
-public interface SecurityExpressionHandler {
+public interface MethodSecurityExpressionHandler {
     /**
     /**
      * @return an expression parser for the expressions used by the implementation.
      * @return an expression parser for the expressions used by the implementation.
      */
      */
@@ -26,11 +25,6 @@ public interface SecurityExpressionHandler {
      */
      */
     EvaluationContext createEvaluationContext(Authentication authentication, MethodInvocation mi);
     EvaluationContext createEvaluationContext(Authentication authentication, MethodInvocation mi);
 
 
-    /**
-     * Provides an evaluation context in which to evaluate security expressions for a web invocation.
-     */
-    EvaluationContext createEvaluationContext(Authentication authentication, FilterInvocation fi);
-
     /**
     /**
      * Filters a target collection or array.
      * Filters a target collection or array.
      * Only applies to method invocations.
      * Only applies to method invocations.

+ 3 - 3
core/src/main/java/org/springframework/security/expression/method/ExpressionAnnotationMethodSecurityMetadataSource.java

@@ -12,7 +12,7 @@ import org.springframework.expression.ExpressionParser;
 import org.springframework.expression.ParseException;
 import org.springframework.expression.ParseException;
 import org.springframework.expression.spel.antlr.SpelAntlrExpressionParser;
 import org.springframework.expression.spel.antlr.SpelAntlrExpressionParser;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttribute;
-import org.springframework.security.expression.SecurityExpressionHandler;
+import org.springframework.security.expression.MethodSecurityExpressionHandler;
 import org.springframework.security.expression.annotation.PostAuthorize;
 import org.springframework.security.expression.annotation.PostAuthorize;
 import org.springframework.security.expression.annotation.PostFilter;
 import org.springframework.security.expression.annotation.PostFilter;
 import org.springframework.security.expression.annotation.PreAuthorize;
 import org.springframework.security.expression.annotation.PreAuthorize;
@@ -45,10 +45,10 @@ public class ExpressionAnnotationMethodSecurityMetadataSource extends AbstractMe
     }
     }
 
 
     /**
     /**
-     * Constructor which obtains the expression parser from the {@link SecurityExpressionHandler#getExpressionParser() }
+     * Constructor which obtains the expression parser from the {@link MethodSecurityExpressionHandler#getExpressionParser() }
      * method on the supplied <tt>SecurityExpressionHandler</tt>.
      * method on the supplied <tt>SecurityExpressionHandler</tt>.
      */
      */
-    public ExpressionAnnotationMethodSecurityMetadataSource(SecurityExpressionHandler handler) {
+    public ExpressionAnnotationMethodSecurityMetadataSource(MethodSecurityExpressionHandler handler) {
         parser = handler.getExpressionParser();
         parser = handler.getExpressionParser();
     }
     }
 
 

+ 4 - 4
core/src/main/java/org/springframework/security/expression/method/MethodExpressionAfterInvocationProvider.java

@@ -12,8 +12,8 @@ import org.springframework.security.Authentication;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.afterinvocation.AfterInvocationProvider;
 import org.springframework.security.afterinvocation.AfterInvocationProvider;
 import org.springframework.security.expression.ExpressionUtils;
 import org.springframework.security.expression.ExpressionUtils;
-import org.springframework.security.expression.SecurityExpressionHandler;
-import org.springframework.security.expression.support.DefaultSecurityExpressionHandler;
+import org.springframework.security.expression.MethodSecurityExpressionHandler;
+import org.springframework.security.expression.support.DefaultMethodSecurityExpressionHandler;
 
 
 /**
 /**
  * AfterInvocationProvider which handles the @PostAuthorize and @PostFilter annotation expressions.
  * AfterInvocationProvider which handles the @PostAuthorize and @PostFilter annotation expressions.
@@ -26,7 +26,7 @@ public class MethodExpressionAfterInvocationProvider implements AfterInvocationP
 
 
     protected final Log logger = LogFactory.getLog(getClass());
     protected final Log logger = LogFactory.getLog(getClass());
 
 
-    private SecurityExpressionHandler expressionHandler = new DefaultSecurityExpressionHandler();
+    private MethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
 
 
     public Object decide(Authentication authentication, Object object, List<ConfigAttribute> config, Object returnedObject)
     public Object decide(Authentication authentication, Object object, List<ConfigAttribute> config, Object returnedObject)
             throws AccessDeniedException {
             throws AccessDeniedException {
@@ -90,7 +90,7 @@ public class MethodExpressionAfterInvocationProvider implements AfterInvocationP
         return clazz.isAssignableFrom(MethodInvocation.class);
         return clazz.isAssignableFrom(MethodInvocation.class);
     }
     }
 
 
-    public void setExpressionHandler(SecurityExpressionHandler expressionHandler) {
+    public void setExpressionHandler(MethodSecurityExpressionHandler expressionHandler) {
         this.expressionHandler = expressionHandler;
         this.expressionHandler = expressionHandler;
     }
     }
 }
 }

+ 4 - 4
core/src/main/java/org/springframework/security/expression/method/MethodExpressionVoter.java

@@ -11,8 +11,8 @@ import org.springframework.expression.Expression;
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.expression.ExpressionUtils;
 import org.springframework.security.expression.ExpressionUtils;
-import org.springframework.security.expression.SecurityExpressionHandler;
-import org.springframework.security.expression.support.DefaultSecurityExpressionHandler;
+import org.springframework.security.expression.MethodSecurityExpressionHandler;
+import org.springframework.security.expression.support.DefaultMethodSecurityExpressionHandler;
 import org.springframework.security.vote.AccessDecisionVoter;
 import org.springframework.security.vote.AccessDecisionVoter;
 
 
 /**
 /**
@@ -29,7 +29,7 @@ import org.springframework.security.vote.AccessDecisionVoter;
 public class MethodExpressionVoter implements AccessDecisionVoter {
 public class MethodExpressionVoter implements AccessDecisionVoter {
     protected final Log logger = LogFactory.getLog(getClass());
     protected final Log logger = LogFactory.getLog(getClass());
 
 
-    private SecurityExpressionHandler expressionHandler = new DefaultSecurityExpressionHandler();
+    private MethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
 
 
     public boolean supports(ConfigAttribute attribute) {
     public boolean supports(ConfigAttribute attribute) {
         return attribute instanceof AbstractExpressionBasedMethodConfigAttribute;
         return attribute instanceof AbstractExpressionBasedMethodConfigAttribute;
@@ -105,7 +105,7 @@ public class MethodExpressionVoter implements AccessDecisionVoter {
         return null;
         return null;
     }
     }
 
 
-    public void setExpressionHandler(SecurityExpressionHandler expressionHandler) {
+    public void setExpressionHandler(MethodSecurityExpressionHandler expressionHandler) {
         this.expressionHandler = expressionHandler;
         this.expressionHandler = expressionHandler;
     }
     }
 }
 }

+ 3 - 14
core/src/main/java/org/springframework/security/expression/support/DefaultSecurityExpressionHandler.java → core/src/main/java/org/springframework/security/expression/support/DefaultMethodSecurityExpressionHandler.java

@@ -14,14 +14,12 @@ import org.springframework.expression.EvaluationContext;
 import org.springframework.expression.Expression;
 import org.springframework.expression.Expression;
 import org.springframework.expression.ExpressionParser;
 import org.springframework.expression.ExpressionParser;
 import org.springframework.expression.spel.antlr.SpelAntlrExpressionParser;
 import org.springframework.expression.spel.antlr.SpelAntlrExpressionParser;
-import org.springframework.expression.spel.support.StandardEvaluationContext;
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
 import org.springframework.security.AuthenticationTrustResolver;
 import org.springframework.security.AuthenticationTrustResolver;
 import org.springframework.security.AuthenticationTrustResolverImpl;
 import org.springframework.security.AuthenticationTrustResolverImpl;
 import org.springframework.security.expression.ExpressionUtils;
 import org.springframework.security.expression.ExpressionUtils;
 import org.springframework.security.expression.PermissionEvaluator;
 import org.springframework.security.expression.PermissionEvaluator;
-import org.springframework.security.expression.SecurityExpressionHandler;
-import org.springframework.security.intercept.web.FilterInvocation;
+import org.springframework.security.expression.MethodSecurityExpressionHandler;
 
 
 /**
 /**
  * The standard implementation of <tt>SecurityExpressionHandler</tt>.
  * The standard implementation of <tt>SecurityExpressionHandler</tt>.
@@ -32,7 +30,7 @@ import org.springframework.security.intercept.web.FilterInvocation;
  * @version $Id$
  * @version $Id$
  * @since 2.5
  * @since 2.5
  */
  */
-public class DefaultSecurityExpressionHandler implements SecurityExpressionHandler {
+public class DefaultMethodSecurityExpressionHandler implements MethodSecurityExpressionHandler {
 
 
     protected final Log logger = LogFactory.getLog(getClass());
     protected final Log logger = LogFactory.getLog(getClass());
 
 
@@ -41,7 +39,7 @@ public class DefaultSecurityExpressionHandler implements SecurityExpressionHandl
     private AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
     private AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
     private ExpressionParser expressionParser = new SpelAntlrExpressionParser();
     private ExpressionParser expressionParser = new SpelAntlrExpressionParser();
 
 
-    public DefaultSecurityExpressionHandler() {
+    public DefaultMethodSecurityExpressionHandler() {
     }
     }
 
 
     /**
     /**
@@ -58,15 +56,6 @@ public class DefaultSecurityExpressionHandler implements SecurityExpressionHandl
         return ctx;
         return ctx;
     }
     }
 
 
-    public EvaluationContext createEvaluationContext(Authentication authentication, FilterInvocation fi) {
-        StandardEvaluationContext ctx = new StandardEvaluationContext();
-        SecurityExpressionRoot root = new WebSecurityExpressionRoot(authentication, fi);
-        root.setTrustResolver(trustResolver);
-        ctx.setRootObject(root);
-
-        return ctx;
-    }
-
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
     public Object filter(Object filterTarget, Expression filterExpression, EvaluationContext ctx) {
     public Object filter(Object filterTarget, Expression filterExpression, EvaluationContext ctx) {
         MethodSecurityExpressionRoot rootObject = (MethodSecurityExpressionRoot) ctx.getRootObject();
         MethodSecurityExpressionRoot rootObject = (MethodSecurityExpressionRoot) ctx.getRootObject();

+ 2 - 2
core/src/main/java/org/springframework/security/expression/support/SecurityExpressionRoot.java

@@ -15,7 +15,7 @@ import org.springframework.security.util.AuthorityUtils;
  * @version $Id$
  * @version $Id$
  * @since 2.5
  * @since 2.5
  */
  */
-abstract class SecurityExpressionRoot {
+public abstract class SecurityExpressionRoot {
     protected final Authentication authentication;
     protected final Authentication authentication;
     private AuthenticationTrustResolver trustResolver;
     private AuthenticationTrustResolver trustResolver;
     /** Allows "permitAll" expression */
     /** Allows "permitAll" expression */
@@ -24,7 +24,7 @@ abstract class SecurityExpressionRoot {
     /** Allows "denyAll" expression */
     /** Allows "denyAll" expression */
     public final boolean denyAll = false;
     public final boolean denyAll = false;
 
 
-    SecurityExpressionRoot(Authentication a) {
+    public SecurityExpressionRoot(Authentication a) {
         if (a == null) {
         if (a == null) {
             throw new IllegalArgumentException("Authentication object cannot be null");
             throw new IllegalArgumentException("Authentication object cannot be null");
         }
         }

+ 5 - 7
core/src/main/java/org/springframework/security/providers/jaas/JaasAuthenticationProvider.java

@@ -41,13 +41,12 @@ import org.springframework.security.Authentication;
 import org.springframework.security.AuthenticationException;
 import org.springframework.security.AuthenticationException;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.SpringSecurityException;
 import org.springframework.security.SpringSecurityException;
-import org.springframework.security.context.HttpSessionSecurityContextRepository;
 import org.springframework.security.context.SecurityContext;
 import org.springframework.security.context.SecurityContext;
+import org.springframework.security.event.SessionDestroyedEvent;
 import org.springframework.security.providers.AuthenticationProvider;
 import org.springframework.security.providers.AuthenticationProvider;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.jaas.event.JaasAuthenticationFailedEvent;
 import org.springframework.security.providers.jaas.event.JaasAuthenticationFailedEvent;
 import org.springframework.security.providers.jaas.event.JaasAuthenticationSuccessEvent;
 import org.springframework.security.providers.jaas.event.JaasAuthenticationSuccessEvent;
-import org.springframework.security.ui.session.HttpSessionDestroyedEvent;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 
 
 
@@ -311,9 +310,8 @@ public class JaasAuthenticationProvider implements AuthenticationProvider, Appli
      *
      *
      * @param event
      * @param event
      */
      */
-    protected void handleLogout(HttpSessionDestroyedEvent event) {
-        SecurityContext context = (SecurityContext)
-                event.getSession().getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
+    protected void handleLogout(SessionDestroyedEvent event) {
+        SecurityContext context = event.getSecurityContext();
 
 
         if (context == null) {
         if (context == null) {
             log.debug("The destroyed session has no SecurityContext");
             log.debug("The destroyed session has no SecurityContext");
@@ -343,8 +341,8 @@ public class JaasAuthenticationProvider implements AuthenticationProvider, Appli
     }
     }
 
 
     public void onApplicationEvent(ApplicationEvent applicationEvent) {
     public void onApplicationEvent(ApplicationEvent applicationEvent) {
-        if (applicationEvent instanceof HttpSessionDestroyedEvent) {
-            HttpSessionDestroyedEvent event = (HttpSessionDestroyedEvent) applicationEvent;
+        if (applicationEvent instanceof SessionDestroyedEvent) {
+            SessionDestroyedEvent event = (SessionDestroyedEvent) applicationEvent;
             handleLogout(event);
             handleLogout(event);
         }
         }
     }
     }

+ 1 - 1
core/src/main/java/org/springframework/security/providers/preauth/PreAuthenticatedAuthenticationProvider.java

@@ -22,7 +22,7 @@ import org.springframework.util.Assert;
  *
  *
  * <p>
  * <p>
  * This authentication provider will not perform any checks on authentication
  * This authentication provider will not perform any checks on authentication
- * requests, as they should already be pre- authenticated. However, the
+ * requests, as they should already be pre-authenticated. However, the
  * AuthenticationUserDetailsService implementation may still throw a UsernameNotFoundException, for example.
  * AuthenticationUserDetailsService implementation may still throw a UsernameNotFoundException, for example.
  *
  *
  * @author Ruud Senden
  * @author Ruud Senden

+ 1 - 1
core/src/main/java/org/springframework/security/context/httpinvoker/AuthenticationSimpleHttpInvokerRequestExecutor.java → core/src/main/java/org/springframework/security/remoting/httpinvoker/AuthenticationSimpleHttpInvokerRequestExecutor.java

@@ -13,7 +13,7 @@
  * limitations under the License.
  * limitations under the License.
  */
  */
 
 
-package org.springframework.security.context.httpinvoker;
+package org.springframework.security.remoting.httpinvoker;
 
 
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
 import org.springframework.security.AuthenticationCredentialsNotFoundException;
 import org.springframework.security.AuthenticationCredentialsNotFoundException;

+ 0 - 0
core/src/main/java/org/springframework/security/context/httpinvoker/package.html → core/src/main/java/org/springframework/security/remoting/httpinvoker/package.html


+ 1 - 1
core/src/main/java/org/springframework/security/context/rmi/ContextPropagatingRemoteInvocation.java → core/src/main/java/org/springframework/security/remoting/rmi/ContextPropagatingRemoteInvocation.java

@@ -13,7 +13,7 @@
  * limitations under the License.
  * limitations under the License.
  */
  */
 
 
-package org.springframework.security.context.rmi;
+package org.springframework.security.remoting.rmi;
 
 
 import org.springframework.security.context.SecurityContext;
 import org.springframework.security.context.SecurityContext;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.context.SecurityContextHolder;

+ 1 - 1
core/src/main/java/org/springframework/security/context/rmi/ContextPropagatingRemoteInvocationFactory.java → core/src/main/java/org/springframework/security/remoting/rmi/ContextPropagatingRemoteInvocationFactory.java

@@ -13,7 +13,7 @@
  * limitations under the License.
  * limitations under the License.
  */
  */
 
 
-package org.springframework.security.context.rmi;
+package org.springframework.security.remoting.rmi;
 
 
 import org.aopalliance.intercept.MethodInvocation;
 import org.aopalliance.intercept.MethodInvocation;
 
 

+ 0 - 0
core/src/main/java/org/springframework/security/context/rmi/package.html → core/src/main/java/org/springframework/security/remoting/rmi/package.html


+ 0 - 50
core/src/main/java/org/springframework/security/ui/session/HttpSessionApplicationEvent.java

@@ -1,50 +0,0 @@
-/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.security.ui.session;
-
-import org.springframework.context.ApplicationEvent;
-
-import javax.servlet.http.HttpSession;
-
-
-/**
- * Parent class for published HttpSession events
- *
- * @author Ray Krueger
- */
-public abstract class HttpSessionApplicationEvent extends ApplicationEvent {
-    //~ Constructors ===================================================================================================
-
-/**
-     * Base constructor for all subclasses must have an HttpSession
-     *
-     * @param httpSession The session to carry as the event source.
-     */
-    public HttpSessionApplicationEvent(HttpSession httpSession) {
-        super(httpSession);
-    }
-
-    //~ Methods ========================================================================================================
-
-    /**
-     * Get the HttpSession that is the cause of the event
-     *
-     * @return HttpSession instance
-     */
-    public HttpSession getSession() {
-        return (HttpSession) getSource();
-    }
-}

+ 1 - 2
core/src/test/java/org/springframework/security/afterinvocation/AfterInvocationProviderManagerTests.java

@@ -25,7 +25,6 @@ import org.springframework.security.AccessDeniedException;
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.SecurityConfig;
 import org.springframework.security.SecurityConfig;
-import org.springframework.security.intercept.web.FilterInvocation;
 import org.springframework.security.util.SimpleMethodInvocation;
 import org.springframework.security.util.SimpleMethodInvocation;
 
 
 
 
@@ -129,7 +128,7 @@ public class AfterInvocationProviderManagerTests extends TestCase {
         manager.setProviders(list);
         manager.setProviders(list);
         manager.afterPropertiesSet();
         manager.afterPropertiesSet();
 
 
-        assertFalse(manager.supports(FilterInvocation.class));
+//        assertFalse(manager.supports(FilterInvocation.class));
         assertTrue(manager.supports(MethodInvocation.class));
         assertTrue(manager.supports(MethodInvocation.class));
     }
     }
 
 

+ 6 - 8
core/src/test/java/org/springframework/security/providers/ProviderManagerTests.java

@@ -15,10 +15,8 @@
 
 
 package org.springframework.security.providers;
 package org.springframework.security.providers;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
@@ -32,7 +30,7 @@ import org.springframework.security.AuthenticationServiceException;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.MockApplicationEventPublisher;
 import org.springframework.security.MockApplicationEventPublisher;
 import org.springframework.security.concurrent.ConcurrentLoginException;
 import org.springframework.security.concurrent.ConcurrentLoginException;
-import org.springframework.security.concurrent.ConcurrentSessionControllerImpl;
+import org.springframework.security.concurrent.ConcurrentSessionController;
 import org.springframework.security.concurrent.NullConcurrentSessionController;
 import org.springframework.security.concurrent.NullConcurrentSessionController;
 import org.springframework.security.util.AuthorityUtils;
 import org.springframework.security.util.AuthorityUtils;
 
 
@@ -102,9 +100,9 @@ public class ProviderManagerTests {
         assertNotNull(target.getSessionController());
         assertNotNull(target.getSessionController());
         assertTrue(target.getSessionController() instanceof NullConcurrentSessionController);
         assertTrue(target.getSessionController() instanceof NullConcurrentSessionController);
 
 
-        ConcurrentSessionControllerImpl impl = new ConcurrentSessionControllerImpl();
-        target.setSessionController(impl);
-        assertEquals(impl, target.getSessionController());
+        ConcurrentSessionController csc = mock(ConcurrentSessionController.class);
+        target.setSessionController(csc);
+        assertEquals(csc, target.getSessionController());
     }
     }
 
 
     @Test(expected=IllegalArgumentException.class)
     @Test(expected=IllegalArgumentException.class)

+ 6 - 6
core/src/test/java/org/springframework/security/providers/jaas/JaasAuthenticationProviderTests.java

@@ -15,6 +15,8 @@
 
 
 package org.springframework.security.providers.jaas;
 package org.springframework.security.providers.jaas;
 
 
+import static org.mockito.Mockito.*;
+
 import java.net.URL;
 import java.net.URL;
 import java.security.Security;
 import java.security.Security;
 import java.util.List;
 import java.util.List;
@@ -26,18 +28,16 @@ import junit.framework.TestCase;
 
 
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.mock.web.MockHttpSession;
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
 import org.springframework.security.AuthenticationException;
 import org.springframework.security.AuthenticationException;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.LockedException;
 import org.springframework.security.LockedException;
 import org.springframework.security.SpringSecurityException;
 import org.springframework.security.SpringSecurityException;
-import org.springframework.security.context.HttpSessionSecurityContextRepository;
 import org.springframework.security.context.SecurityContextImpl;
 import org.springframework.security.context.SecurityContextImpl;
+import org.springframework.security.event.SessionDestroyedEvent;
 import org.springframework.security.providers.TestingAuthenticationToken;
 import org.springframework.security.providers.TestingAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
-import org.springframework.security.ui.session.HttpSessionDestroyedEvent;
 import org.springframework.security.util.AuthorityUtils;
 import org.springframework.security.util.AuthorityUtils;
 
 
 
 
@@ -204,10 +204,10 @@ public class JaasAuthenticationProviderTests extends TestCase {
         SecurityContextImpl context = new SecurityContextImpl();
         SecurityContextImpl context = new SecurityContextImpl();
         context.setAuthentication(token);
         context.setAuthentication(token);
 
 
-        MockHttpSession mockSession = new MockHttpSession();
-        mockSession.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, context);
+        SessionDestroyedEvent event = mock(SessionDestroyedEvent.class);
+        when(event.getSecurityContext()).thenReturn(context);
 
 
-        jaasProvider.onApplicationEvent(new HttpSessionDestroyedEvent(mockSession));
+        jaasProvider.handleLogout(event);
 
 
         assertTrue(loginContext.loggedOut);
         assertTrue(loginContext.loggedOut);
     }
     }

+ 2 - 2
core/src/test/java/org/springframework/security/context/httpinvoker/AuthenticationSimpleHttpInvokerRequestExecutorTests.java → core/src/test/java/org/springframework/security/remoting/httpinvoker/AuthenticationSimpleHttpInvokerRequestExecutorTests.java

@@ -13,16 +13,16 @@
  * limitations under the License.
  * limitations under the License.
  */
  */
 
 
-package org.springframework.security.context.httpinvoker;
+package org.springframework.security.remoting.httpinvoker;
 
 
 import junit.framework.TestCase;
 import junit.framework.TestCase;
 
 
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
 
 
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.context.SecurityContextHolder;
-import org.springframework.security.context.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor;
 
 
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
+import org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor;
 
 
 import java.io.IOException;
 import java.io.IOException;
 
 

+ 3 - 1
core/src/test/java/org/springframework/security/context/rmi/ContextPropagatingRemoteInvocationTests.java → core/src/test/java/org/springframework/security/remoting/rmi/ContextPropagatingRemoteInvocationTests.java

@@ -13,7 +13,7 @@
  * limitations under the License.
  * limitations under the License.
  */
  */
 
 
-package org.springframework.security.context.rmi;
+package org.springframework.security.remoting.rmi;
 
 
 import junit.framework.TestCase;
 import junit.framework.TestCase;
 
 
@@ -23,6 +23,8 @@ import org.springframework.security.TargetObject;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.context.SecurityContextHolder;
 
 
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
+import org.springframework.security.remoting.rmi.ContextPropagatingRemoteInvocation;
+import org.springframework.security.remoting.rmi.ContextPropagatingRemoteInvocationFactory;
 
 
 import org.springframework.security.util.SimpleMethodInvocation;
 import org.springframework.security.util.SimpleMethodInvocation;
 
 

+ 0 - 56
core/src/test/java/org/springframework/security/util/MockFilterChain.java

@@ -1,56 +0,0 @@
-/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.security.util;
-
-import java.io.IOException;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.junit.Assert;
-
-
-/**
- * A mock <code>FilterChain</code>.
- *
- * @author Ben Alex
- * @version $Id$
- */
-public class MockFilterChain implements FilterChain {
-    //~ Instance fields ================================================================================================
-
-    private boolean expectToProceed;
-
-    //~ Constructors ===================================================================================================
-
-    public MockFilterChain() {
-        this(true);
-    }
-
-    public MockFilterChain(boolean expectToProceed) {
-        this.expectToProceed = expectToProceed;
-    }
-
-    //~ Methods ========================================================================================================
-
-    public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
-        if (!expectToProceed) {
-            Assert.fail("Did not expect filter chain to proceed");
-        }
-    }
-}

+ 2 - 2
itest/context/src/test/java/org/springframework/security/performance/FilterChainPerformanceTests.java

@@ -18,10 +18,10 @@ import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockHttpSession;
 import org.springframework.mock.web.MockHttpSession;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.GrantedAuthorityImpl;
-import org.springframework.security.context.HttpSessionSecurityContextRepository;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.context.SecurityContextHolder;
+import org.springframework.security.context.web.HttpSessionSecurityContextRepository;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
-import org.springframework.security.util.FilterChainProxy;
+import org.springframework.security.web.util.FilterChainProxy;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.util.StopWatch;
 import org.springframework.util.StopWatch;

+ 3 - 3
itest/context/src/test/resources/filter-chain-performance-app-context.xml

@@ -11,13 +11,13 @@
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                         http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">
                         http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">
 
 
-    <bean id="fcpMinimalStack" class="org.springframework.security.util.FilterChainProxy">
+    <bean id="fcpMinimalStack" class="org.springframework.security.web.util.FilterChainProxy">
         <sec:filter-chain-map path-type="ant">
         <sec:filter-chain-map path-type="ant">
             <sec:filter-chain pattern="/**" filters="scpf,preAuthFilter,etf,fsi"/>
             <sec:filter-chain pattern="/**" filters="scpf,preAuthFilter,etf,fsi"/>
         </sec:filter-chain-map>
         </sec:filter-chain-map>
     </bean>
     </bean>
 
 
-    <bean id="fcpFullStack" class="org.springframework.security.util.FilterChainProxy">
+    <bean id="fcpFullStack" class="org.springframework.security.web.util.FilterChainProxy">
         <sec:filter-chain-map path-type="ant">
         <sec:filter-chain-map path-type="ant">
             <sec:filter-chain pattern="/**" filters="scpf,preAuthFilter,apf,basicPf,logoutFilter,scharf,etf,fsi"/>
             <sec:filter-chain pattern="/**" filters="scpf,preAuthFilter,apf,basicPf,logoutFilter,scharf,etf,fsi"/>
         </sec:filter-chain-map>
         </sec:filter-chain-map>
@@ -37,7 +37,7 @@
         <sec:user name="bob" password="bobspassword" authorities="ROLE_0,ROLE_1"/>
         <sec:user name="bob" password="bobspassword" authorities="ROLE_0,ROLE_1"/>
     </sec:user-service>
     </sec:user-service>
 
 
-    <bean id="scpf" class="org.springframework.security.context.SecurityContextPersistenceFilter"/>
+    <bean id="scpf" class="org.springframework.security.context.web.SecurityContextPersistenceFilter"/>
 
 
     <bean id="apf" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
     <bean id="apf" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
         <property name="authenticationManager" ref="authenticationManager"/>
         <property name="authenticationManager" ref="authenticationManager"/>

+ 0 - 4
ldap/pom.xml

@@ -51,10 +51,6 @@
             <scope>runtime</scope>
             <scope>runtime</scope>
             <optional>true</optional>
             <optional>true</optional>
         </dependency>
         </dependency>
-        <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-junit4</artifactId>
-        </dependency>
         <dependency>
         <dependency>
             <groupId>log4j</groupId>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
             <artifactId>log4j</artifactId>

+ 6 - 1
ntlm/pom.xml

@@ -15,11 +15,16 @@
           <artifactId>spring-security-core</artifactId>
           <artifactId>spring-security-core</artifactId>
           <version>${project.version}</version>
           <version>${project.version}</version>
         </dependency>
         </dependency>
+        <dependency>
+          <groupId>org.springframework.security</groupId>
+          <artifactId>spring-security-web</artifactId>
+          <version>${project.version}</version>
+        </dependency>
         <dependency>
         <dependency>
           <groupId>org.springframework.security</groupId>
           <groupId>org.springframework.security</groupId>
           <artifactId>spring-security-ldap</artifactId>
           <artifactId>spring-security-ldap</artifactId>
           <version>${project.version}</version>
           <version>${project.version}</version>
-        </dependency>        
+        </dependency>
         <!-- SMT NTLM-->
         <!-- SMT NTLM-->
         <dependency>
         <dependency>
             <groupId>org.samba.jcifs</groupId>
             <groupId>org.samba.jcifs</groupId>

+ 1 - 1
openid/pom.xml

@@ -14,7 +14,7 @@
     <dependencies>
     <dependencies>
         <dependency>
         <dependency>
             <groupId>org.springframework.security</groupId>
             <groupId>org.springframework.security</groupId>
-            <artifactId>spring-security-core</artifactId>
+            <artifactId>spring-security-web</artifactId>
             <version>${project.version}</version>
             <version>${project.version}</version>
         </dependency>
         </dependency>
         <dependency>
         <dependency>

+ 18 - 9
openid/src/test/java/org/springframework/security/ui/openid/OpenIDAuthenticationProcessingFilterTests.java

@@ -1,16 +1,22 @@
 package org.springframework.security.ui.openid;
 package org.springframework.security.ui.openid;
 
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.*;
+
+import javax.servlet.FilterChain;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.junit.Before;
+import org.junit.Test;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.security.MockAuthenticationManager;
 import org.springframework.security.MockAuthenticationManager;
 import org.springframework.security.ui.SavedRequestAwareAuthenticationSuccessHandler;
 import org.springframework.security.ui.SavedRequestAwareAuthenticationSuccessHandler;
 import org.springframework.security.ui.openid.consumers.MockOpenIDConsumer;
 import org.springframework.security.ui.openid.consumers.MockOpenIDConsumer;
-import org.springframework.security.util.MockFilterChain;
 
 
-import javax.servlet.http.HttpServletRequest;
-
-public class OpenIDAuthenticationProcessingFilterTests extends TestCase {
+public class OpenIDAuthenticationProcessingFilterTests {
 
 
     OpenIDAuthenticationProcessingFilter filter;
     OpenIDAuthenticationProcessingFilter filter;
     private static final String REDIRECT_URL = "http://www.example.com/redirect";
     private static final String REDIRECT_URL = "http://www.example.com/redirect";
@@ -19,7 +25,8 @@ public class OpenIDAuthenticationProcessingFilterTests extends TestCase {
     private static final String FILTER_PROCESS_URL = "http://localhost:80" + REQUEST_PATH;
     private static final String FILTER_PROCESS_URL = "http://localhost:80" + REQUEST_PATH;
     private static final String DEFAULT_TARGET_URL = FILTER_PROCESS_URL;
     private static final String DEFAULT_TARGET_URL = FILTER_PROCESS_URL;
 
 
-    protected void setUp() throws Exception {
+    @Before
+    public void setUp() throws Exception {
         filter = new OpenIDAuthenticationProcessingFilter();
         filter = new OpenIDAuthenticationProcessingFilter();
         filter.setConsumer(new MockOpenIDConsumer(REDIRECT_URL));
         filter.setConsumer(new MockOpenIDConsumer(REDIRECT_URL));
         SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
         SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
@@ -29,6 +36,7 @@ public class OpenIDAuthenticationProcessingFilterTests extends TestCase {
         filter.afterPropertiesSet();
         filter.afterPropertiesSet();
     }
     }
 
 
+    @Test
     public void testFilterOperation() throws Exception {
     public void testFilterOperation() throws Exception {
         MockHttpServletRequest req = new MockHttpServletRequest("GET", REQUEST_PATH);
         MockHttpServletRequest req = new MockHttpServletRequest("GET", REQUEST_PATH);
         MockHttpServletResponse response = new MockHttpServletResponse();
         MockHttpServletResponse response = new MockHttpServletResponse();
@@ -45,9 +53,10 @@ public class OpenIDAuthenticationProcessingFilterTests extends TestCase {
             }
             }
         });
         });
 
 
-        filter.doFilter(req, response, new MockFilterChain(false));
+        FilterChain fc = mock(FilterChain.class);
+        filter.doFilter(req, response, fc);
         assertEquals(REDIRECT_URL, response.getRedirectedUrl());
         assertEquals(REDIRECT_URL, response.getRedirectedUrl());
+        // Filter chain shouldn't proceed
+        verify(fc, never()).doFilter(any(HttpServletRequest.class), any(HttpServletResponse.class));
     }
     }
-
-
 }
 }

+ 7 - 7
pom.xml

@@ -9,7 +9,7 @@
 
 
     <modules>
     <modules>
         <module>core</module>
         <module>core</module>
-        <!-- module>web</module -->
+        <module>web</module>
         <module>ldap</module>
         <module>ldap</module>
         <module>config</module>
         <module>config</module>
         <module>acl</module>
         <module>acl</module>
@@ -300,6 +300,12 @@
             <artifactId>mockito-core</artifactId>
             <artifactId>mockito-core</artifactId>
             <version>1.7</version>
             <version>1.7</version>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>org.jmock</groupId>
+            <artifactId>jmock-junit4</artifactId>
+            <version>2.5.1</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>
@@ -814,12 +820,6 @@
                 <version>1.8.0.7</version>
                 <version>1.8.0.7</version>
                 <scope>runtime</scope>
                 <scope>runtime</scope>
             </dependency>
             </dependency>
-            <dependency>
-                <groupId>org.jmock</groupId>
-                <artifactId>jmock-junit4</artifactId>
-                <version>2.5.1</version>
-                <scope>test</scope>
-            </dependency>
             <dependency>
             <dependency>
                 <groupId>commons-logging</groupId>
                 <groupId>commons-logging</groupId>
                 <artifactId>commons-logging</artifactId>
                 <artifactId>commons-logging</artifactId>

+ 1 - 1
portlet/src/test/java/org/springframework/security/ui/portlet/PortletProcessingInterceptorTests.java

@@ -39,7 +39,6 @@ import org.springframework.security.providers.TestingAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.portlet.PortletTestUtils;
 import org.springframework.security.providers.portlet.PortletTestUtils;
 import org.springframework.security.providers.preauth.PreAuthenticatedAuthenticationToken;
 import org.springframework.security.providers.preauth.PreAuthenticatedAuthenticationToken;
-import org.springframework.security.ui.AbstractProcessingFilter;
 import org.springframework.security.userdetails.User;
 import org.springframework.security.userdetails.User;
 import org.springframework.security.util.AuthorityUtils;
 import org.springframework.security.util.AuthorityUtils;
 
 
@@ -52,6 +51,7 @@ import org.springframework.security.util.AuthorityUtils;
  */
  */
 @SuppressWarnings("unchecked")
 @SuppressWarnings("unchecked")
 public class PortletProcessingInterceptorTests {
 public class PortletProcessingInterceptorTests {
+    public static final String SPRING_SECURITY_LAST_EXCEPTION_KEY = "SPRING_SECURITY_LAST_EXCEPTION";
     //~ Methods ========================================================================================================
     //~ Methods ========================================================================================================
 
 
     @Before
     @Before

+ 1 - 1
samples/contacts/src/main/webapp/WEB-INF/applicationContext-security.xml

@@ -48,7 +48,7 @@
        <b:property name="targetUrl" value="/secure/index.htm"/>
        <b:property name="targetUrl" value="/secure/index.htm"/>
     </b:bean>
     </b:bean>
 
 
-    <b:bean id="expressionHandler" class="org.springframework.security.expression.support.DefaultSecurityExpressionHandler">
+    <b:bean id="expressionHandler" class="org.springframework.security.expression.support.DefaultMethodSecurityExpressionHandler">
         <b:property name="permissionEvaluator" ref="permissionEvaluator" />
         <b:property name="permissionEvaluator" ref="permissionEvaluator" />
     </b:bean>
     </b:bean>
 
 

+ 1 - 1
samples/contacts/src/test/resources/applicationContext-contacts-test.xml

@@ -24,7 +24,7 @@
         <jdbc-user-service data-source-ref="dataSource"/>
         <jdbc-user-service data-source-ref="dataSource"/>
     </authentication-provider>
     </authentication-provider>
 
 
-    <b:bean id="expressionHandler" class="org.springframework.security.expression.support.DefaultSecurityExpressionHandler">
+    <b:bean id="expressionHandler" class="org.springframework.security.expression.support.DefaultMethodSecurityExpressionHandler">
         <b:property name="permissionEvaluator" ref="permissionEvaluator" />
         <b:property name="permissionEvaluator" ref="permissionEvaluator" />
     </b:bean>
     </b:bean>
 
 

+ 8 - 8
samples/dms/src/main/java/sample/dms/DocumentDaoImpl.java

@@ -59,8 +59,8 @@ public class DocumentDaoImpl extends JdbcDaoSupport implements DocumentDao {
 
 
     /** Executes recursive SQL as needed to build a full Directory hierarchy of objects */
     /** Executes recursive SQL as needed to build a full Directory hierarchy of objects */
     private Directory getDirectoryWithImmediateParentPopulated(final Long id) {
     private Directory getDirectoryWithImmediateParentPopulated(final Long id) {
-        return (Directory) getJdbcTemplate().queryForObject(SELECT_FROM_DIRECTORY_SINGLE, new Object[] {id}, new RowMapper() {
-            public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {
+        return getJdbcTemplate().queryForObject(SELECT_FROM_DIRECTORY_SINGLE, new Object[] {id}, new RowMapper<Directory>() {
+            public Directory mapRow(ResultSet rs, int rowNumber) throws SQLException {
                 Long parentDirectoryId = new Long(rs.getLong("parent_directory_id"));
                 Long parentDirectoryId = new Long(rs.getLong("parent_directory_id"));
                 Directory parentDirectory = Directory.ROOT_DIRECTORY;
                 Directory parentDirectory = Directory.ROOT_DIRECTORY;
                 if (parentDirectoryId != null && !parentDirectoryId.equals(new Long(-1))) {
                 if (parentDirectoryId != null && !parentDirectoryId.equals(new Long(-1))) {
@@ -77,20 +77,20 @@ public class DocumentDaoImpl extends JdbcDaoSupport implements DocumentDao {
     public AbstractElement[] findElements(Directory directory) {
     public AbstractElement[] findElements(Directory directory) {
         Assert.notNull(directory, "Directory required (the ID can be null to refer to root)");
         Assert.notNull(directory, "Directory required (the ID can be null to refer to root)");
         if (directory.getId() == null) {
         if (directory.getId() == null) {
-            List directories = getJdbcTemplate().query(SELECT_FROM_DIRECTORY_NULL, new RowMapper() {
-                public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {
+            List<Directory> directories = getJdbcTemplate().query(SELECT_FROM_DIRECTORY_NULL, new RowMapper<Directory>() {
+                public Directory mapRow(ResultSet rs, int rowNumber) throws SQLException {
                     return getDirectoryWithImmediateParentPopulated(new Long(rs.getLong("id")));
                     return getDirectoryWithImmediateParentPopulated(new Long(rs.getLong("id")));
                 }
                 }
             });
             });
             return (AbstractElement[]) directories.toArray(new AbstractElement[] {});
             return (AbstractElement[]) directories.toArray(new AbstractElement[] {});
         }
         }
-        List directories = getJdbcTemplate().query(SELECT_FROM_DIRECTORY, new Object[] {directory.getId()}, new RowMapper() {
-            public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {
+        List<AbstractElement> directories = getJdbcTemplate().query(SELECT_FROM_DIRECTORY, new Object[] {directory.getId()}, new RowMapper<AbstractElement>() {
+            public Directory mapRow(ResultSet rs, int rowNumber) throws SQLException {
                 return getDirectoryWithImmediateParentPopulated(new Long(rs.getLong("id")));
                 return getDirectoryWithImmediateParentPopulated(new Long(rs.getLong("id")));
             }
             }
         });
         });
-        List files = getJdbcTemplate().query(SELECT_FROM_FILE, new Object[] {directory.getId()}, new RowMapper() {
-            public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {
+        List<File> files = getJdbcTemplate().query(SELECT_FROM_FILE, new Object[] {directory.getId()}, new RowMapper<File>() {
+            public File mapRow(ResultSet rs, int rowNumber) throws SQLException {
                 Long parentDirectoryId = new Long(rs.getLong("parent_directory_id"));
                 Long parentDirectoryId = new Long(rs.getLong("parent_directory_id"));
                 Directory parentDirectory = null;
                 Directory parentDirectory = null;
                 if (parentDirectoryId != null) {
                 if (parentDirectoryId != null) {

+ 2 - 6
samples/dms/src/main/resources/applicationContext-dms-secure.xml

@@ -50,8 +50,6 @@
       <property name="providers">
       <property name="providers">
          <list>
          <list>
             <ref local="daoAuthenticationProvider"/>
             <ref local="daoAuthenticationProvider"/>
-            <ref local="anonymousAuthenticationProvider"/>
-            <ref local="rememberMeAuthenticationProvider"/>
          </list>
          </list>
       </property>
       </property>
    </bean>
    </bean>
@@ -81,13 +79,11 @@
 
 
    <!-- Automatically receives AuthenticationEvent messages -->
    <!-- Automatically receives AuthenticationEvent messages -->
    <bean id="loggerListener" class="org.springframework.security.event.authentication.LoggerListener"/>
    <bean id="loggerListener" class="org.springframework.security.event.authentication.LoggerListener"/>
-
+<!--
    <bean id="anonymousAuthenticationProvider" class="org.springframework.security.providers.anonymous.AnonymousAuthenticationProvider">
    <bean id="anonymousAuthenticationProvider" class="org.springframework.security.providers.anonymous.AnonymousAuthenticationProvider">
       <property name="key" value="foobar"/>
       <property name="key" value="foobar"/>
    </bean>
    </bean>
 
 
-   <bean id="httpSessionContextIntegrationFilter" class="org.springframework.security.context.HttpSessionContextIntegrationFilter"/>
-
    <bean id="rememberMeServices" class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices">
    <bean id="rememberMeServices" class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices">
       <property name="userDetailsService" ref="jdbcDaoImpl"/>
       <property name="userDetailsService" ref="jdbcDaoImpl"/>
       <property name="key" value="springRocks"/>
       <property name="key" value="springRocks"/>
@@ -96,7 +92,7 @@
    <bean id="rememberMeAuthenticationProvider" class="org.springframework.security.providers.rememberme.RememberMeAuthenticationProvider">
    <bean id="rememberMeAuthenticationProvider" class="org.springframework.security.providers.rememberme.RememberMeAuthenticationProvider">
       <property name="key" value="springRocks"/>
       <property name="key" value="springRocks"/>
    </bean>
    </bean>
-
+ -->
    <!-- ========================= "BEFORE INVOCATION" AUTHORIZATION DEFINITIONS ============================== -->
    <!-- ========================= "BEFORE INVOCATION" AUTHORIZATION DEFINITIONS ============================== -->
 
 
    <!-- ACL permission masks used by this application -->
    <!-- ACL permission masks used by this application -->

+ 1 - 1
samples/pom.xml

@@ -16,7 +16,7 @@
         <module>preauth</module>
         <module>preauth</module>
         <module>openid</module>
         <module>openid</module>
         <module>ldap</module>
         <module>ldap</module>
-        <module>portlet</module>
+        <!-- module>portlet</module -->
         <module>cas</module>        
         <module>cas</module>        
     </modules>
     </modules>
     <dependencies>
     <dependencies>

+ 5 - 0
sandbox/other/pom.xml

@@ -17,6 +17,11 @@
       <artifactId>spring-security-core</artifactId>
       <artifactId>spring-security-core</artifactId>
       <version>${project.version}</version>
       <version>${project.version}</version>
     </dependency>
     </dependency>
+    <dependency>
+      <groupId>org.springframework.security</groupId>
+      <artifactId>spring-security-ldap</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
     <dependency>
         <groupId>org.springframework.security</groupId>
         <groupId>org.springframework.security</groupId>
         <artifactId>spring-security-core</artifactId>
         <artifactId>spring-security-core</artifactId>

+ 0 - 4
taglibs/pom.xml

@@ -43,10 +43,6 @@
             <artifactId>standard</artifactId>
             <artifactId>standard</artifactId>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
-        <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-junit4</artifactId>
-        </dependency>
     </dependencies>
     </dependencies>
     <build>
     <build>
         <resources>
         <resources>

+ 57 - 0
web/pom.xml

@@ -0,0 +1,57 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.security</groupId>
+        <artifactId>spring-security-parent</artifactId>
+        <version>2.5.0-SNAPSHOT</version>
+    </parent>
+    <packaging>jar</packaging>
+    <artifactId>spring-security-web</artifactId>
+    <name>Spring Security - Web Application Security Module</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-core</artifactId>
+            <version>${project.version}</version>
+            <classifier>tests</classifier>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>org.springframework.web</artifactId>
+            <!-- optional>true</optional -->
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>org.springframework.jdbc</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>org.springframework.test</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>jaxen</groupId>
+            <artifactId>jaxen</artifactId>
+            <version>1.1.1</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>hsqldb</groupId>
+            <artifactId>hsqldb</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 1 - 1
core/src/main/java/org/springframework/security/concurrent/ConcurrentSessionFilter.java → web/src/main/java/org/springframework/security/concurrent/ConcurrentSessionFilter.java

@@ -21,7 +21,7 @@ import org.springframework.security.ui.FilterChainOrder;
 import org.springframework.security.ui.SpringSecurityFilter;
 import org.springframework.security.ui.SpringSecurityFilter;
 import org.springframework.security.ui.logout.LogoutHandler;
 import org.springframework.security.ui.logout.LogoutHandler;
 import org.springframework.security.ui.logout.SecurityContextLogoutHandler;
 import org.springframework.security.ui.logout.SecurityContextLogoutHandler;
-import org.springframework.security.util.UrlUtils;
+import org.springframework.security.web.util.UrlUtils;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 

+ 0 - 0
core/src/main/java/org/springframework/security/concurrent/SessionRegistryImpl.java → web/src/main/java/org/springframework/security/concurrent/SessionRegistryImpl.java


+ 6 - 0
web/src/main/java/org/springframework/security/concurrent/package.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+Concurrent session control and registration classes.
+</body>
+</html>
+

+ 1 - 1
core/src/main/java/org/springframework/security/context/HttpRequestResponseHolder.java → web/src/main/java/org/springframework/security/context/web/HttpRequestResponseHolder.java

@@ -1,4 +1,4 @@
-package org.springframework.security.context;
+package org.springframework.security.context.web;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;

+ 4 - 1
core/src/main/java/org/springframework/security/context/HttpSessionContextIntegrationFilter.java → web/src/main/java/org/springframework/security/context/web/HttpSessionContextIntegrationFilter.java

@@ -13,11 +13,14 @@
  * limitations under the License.
  * limitations under the License.
  */
  */
 
 
-package org.springframework.security.context;
+package org.springframework.security.context.web;
 
 
 import javax.servlet.ServletException;
 import javax.servlet.ServletException;
 
 
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.InitializingBean;
+import org.springframework.security.context.SecurityContext;
+import org.springframework.security.context.SecurityContextHolder;
+import org.springframework.security.context.SecurityContextImpl;
 import org.springframework.security.ui.FilterChainOrder;
 import org.springframework.security.ui.FilterChainOrder;
 
 
 /**
 /**

+ 5 - 1
core/src/main/java/org/springframework/security/context/HttpSessionSecurityContextRepository.java → web/src/main/java/org/springframework/security/context/web/HttpSessionSecurityContextRepository.java

@@ -1,4 +1,4 @@
-package org.springframework.security.context;
+package org.springframework.security.context.web;
 
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;
 
 
@@ -10,6 +10,10 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.LogFactory;
 import org.springframework.security.AuthenticationTrustResolver;
 import org.springframework.security.AuthenticationTrustResolver;
 import org.springframework.security.AuthenticationTrustResolverImpl;
 import org.springframework.security.AuthenticationTrustResolverImpl;
+import org.springframework.security.context.SecurityContext;
+import org.springframework.security.context.SecurityContextHolder;
+import org.springframework.security.context.SecurityContextHolderStrategy;
+import org.springframework.security.context.SecurityContextImpl;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 import org.springframework.util.ReflectionUtils;
 import org.springframework.util.ReflectionUtils;
 
 

+ 4 - 1
core/src/main/java/org/springframework/security/context/SaveContextOnUpdateOrErrorResponseWrapper.java → web/src/main/java/org/springframework/security/context/web/SaveContextOnUpdateOrErrorResponseWrapper.java

@@ -1,10 +1,13 @@
-package org.springframework.security.context;
+package org.springframework.security.context.web;
 
 
 import java.io.IOException;
 import java.io.IOException;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponseWrapper;
 import javax.servlet.http.HttpServletResponseWrapper;
 
 
+import org.springframework.security.context.SecurityContext;
+import org.springframework.security.context.SecurityContextHolder;
+
 /**
 /**
  * Base class for response wrappers which encapsulate the logic for storing a security context and which
  * Base class for response wrappers which encapsulate the logic for storing a security context and which
  * store the with the <code>SecurityContext</code> when a <code>sendError()</code> or <code>sendRedirect</code>
  * store the with the <code>SecurityContext</code> when a <code>sendError()</code> or <code>sendRedirect</code>

+ 3 - 1
core/src/main/java/org/springframework/security/context/SecurityContextPersistenceFilter.java → web/src/main/java/org/springframework/security/context/web/SecurityContextPersistenceFilter.java

@@ -1,4 +1,4 @@
-package org.springframework.security.context;
+package org.springframework.security.context.web;
 
 
 import java.io.IOException;
 import java.io.IOException;
 
 
@@ -8,6 +8,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpSession;
 
 
+import org.springframework.security.context.SecurityContext;
+import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.ui.FilterChainOrder;
 import org.springframework.security.ui.FilterChainOrder;
 import org.springframework.security.ui.SpringSecurityFilter;
 import org.springframework.security.ui.SpringSecurityFilter;
 
 

+ 4 - 2
core/src/main/java/org/springframework/security/context/SecurityContextRepository.java → web/src/main/java/org/springframework/security/context/web/SecurityContextRepository.java

@@ -1,8 +1,10 @@
-package org.springframework.security.context;
+package org.springframework.security.context.web;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
 
+import org.springframework.security.context.SecurityContext;
+
 /**
 /**
  * Strategy used for persisting a {@link SecurityContext} between requests.
  * Strategy used for persisting a {@link SecurityContext} between requests.
  * <p>
  * <p>
@@ -43,7 +45,7 @@ public interface SecurityContextRepository {
     /**
     /**
      * Stores the security context on completion of a request.
      * Stores the security context on completion of a request.
      *
      *
-     * @param context the non-null context which was obtained f
+     * @param context the non-null context which was obtained from the holder.
      * @param request
      * @param request
      * @param response
      * @param response
      */
      */

+ 1 - 2
core/src/main/java/org/springframework/security/expression/web/ExpressionBasedFilterInvocationSecurityMetadataSource.java → web/src/main/java/org/springframework/security/expression/web/ExpressionBasedFilterInvocationSecurityMetadataSource.java

@@ -10,7 +10,6 @@ import org.apache.commons.logging.LogFactory;
 import org.springframework.expression.ExpressionParser;
 import org.springframework.expression.ExpressionParser;
 import org.springframework.expression.ParseException;
 import org.springframework.expression.ParseException;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttribute;
-import org.springframework.security.expression.SecurityExpressionHandler;
 import org.springframework.security.intercept.web.DefaultFilterInvocationSecurityMetadataSource;
 import org.springframework.security.intercept.web.DefaultFilterInvocationSecurityMetadataSource;
 import org.springframework.security.intercept.web.RequestKey;
 import org.springframework.security.intercept.web.RequestKey;
 import org.springframework.security.util.UrlMatcher;
 import org.springframework.security.util.UrlMatcher;
@@ -27,7 +26,7 @@ public final class ExpressionBasedFilterInvocationSecurityMetadataSource extends
     private final static Log logger = LogFactory.getLog(ExpressionBasedFilterInvocationSecurityMetadataSource.class);
     private final static Log logger = LogFactory.getLog(ExpressionBasedFilterInvocationSecurityMetadataSource.class);
 
 
     public ExpressionBasedFilterInvocationSecurityMetadataSource(UrlMatcher urlMatcher,
     public ExpressionBasedFilterInvocationSecurityMetadataSource(UrlMatcher urlMatcher,
-            LinkedHashMap<RequestKey, List<ConfigAttribute>> requestMap, SecurityExpressionHandler expressionHandler) {
+            LinkedHashMap<RequestKey, List<ConfigAttribute>> requestMap, WebSecurityExpressionHandler expressionHandler) {
         super(urlMatcher, processMap(requestMap, expressionHandler.getExpressionParser()));
         super(urlMatcher, processMap(requestMap, expressionHandler.getExpressionParser()));
         Assert.notNull(expressionHandler, "A non-null SecurityExpressionHandler is required");
         Assert.notNull(expressionHandler, "A non-null SecurityExpressionHandler is required");
     }
     }

+ 0 - 0
core/src/main/java/org/springframework/security/expression/web/WebExpressionConfigAttribute.java → web/src/main/java/org/springframework/security/expression/web/WebExpressionConfigAttribute.java


+ 5 - 4
core/src/main/java/org/springframework/security/expression/web/WebExpressionVoter.java → web/src/main/java/org/springframework/security/expression/web/WebExpressionVoter.java

@@ -6,8 +6,9 @@ import org.springframework.expression.EvaluationContext;
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.ConfigAttribute;
 import org.springframework.security.expression.ExpressionUtils;
 import org.springframework.security.expression.ExpressionUtils;
-import org.springframework.security.expression.SecurityExpressionHandler;
-import org.springframework.security.expression.support.DefaultSecurityExpressionHandler;
+import org.springframework.security.expression.MethodSecurityExpressionHandler;
+import org.springframework.security.expression.support.DefaultMethodSecurityExpressionHandler;
+import org.springframework.security.expression.web.support.DefaultWebSecurityExpressionHandler;
 import org.springframework.security.intercept.web.FilterInvocation;
 import org.springframework.security.intercept.web.FilterInvocation;
 import org.springframework.security.vote.AccessDecisionVoter;
 import org.springframework.security.vote.AccessDecisionVoter;
 
 
@@ -18,7 +19,7 @@ import org.springframework.security.vote.AccessDecisionVoter;
  * @since 2.5
  * @since 2.5
  */
  */
 public class WebExpressionVoter implements AccessDecisionVoter {
 public class WebExpressionVoter implements AccessDecisionVoter {
-    private SecurityExpressionHandler expressionHandler = new DefaultSecurityExpressionHandler();
+    private WebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
 
 
     public int vote(Authentication authentication, Object object, List<ConfigAttribute> attributes) {
     public int vote(Authentication authentication, Object object, List<ConfigAttribute> attributes) {
         assert authentication != null;
         assert authentication != null;
@@ -55,7 +56,7 @@ public class WebExpressionVoter implements AccessDecisionVoter {
         return clazz.isAssignableFrom(FilterInvocation.class);
         return clazz.isAssignableFrom(FilterInvocation.class);
     }
     }
 
 
-    public void setExpressionHandler(SecurityExpressionHandler expressionHandler) {
+    public void setExpressionHandler(WebSecurityExpressionHandler expressionHandler) {
         this.expressionHandler = expressionHandler;
         this.expressionHandler = expressionHandler;
     }
     }
 }
 }

+ 19 - 0
web/src/main/java/org/springframework/security/expression/web/WebSecurityExpressionHandler.java

@@ -0,0 +1,19 @@
+package org.springframework.security.expression.web;
+
+import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.security.Authentication;
+import org.springframework.security.intercept.web.FilterInvocation;
+
+public interface WebSecurityExpressionHandler {
+    /**
+     * @return an expression parser for the expressions used by the implementation.
+     */
+    ExpressionParser getExpressionParser();
+
+    /**
+     * Provides an evaluation context in which to evaluate security expressions for a web invocation.
+     */
+    EvaluationContext createEvaluationContext(Authentication authentication, FilterInvocation fi);
+
+}

+ 39 - 0
web/src/main/java/org/springframework/security/expression/web/support/DefaultWebSecurityExpressionHandler.java

@@ -0,0 +1,39 @@
+package org.springframework.security.expression.web.support;
+
+import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.antlr.SpelAntlrExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+import org.springframework.security.Authentication;
+import org.springframework.security.AuthenticationTrustResolver;
+import org.springframework.security.AuthenticationTrustResolverImpl;
+import org.springframework.security.expression.support.SecurityExpressionRoot;
+import org.springframework.security.expression.web.WebSecurityExpressionHandler;
+import org.springframework.security.intercept.web.FilterInvocation;
+
+/**
+ * Facade which isolates Spring Security's requirements for evaluating web-security expressions
+ * from the implementation of the underlying expression objects.
+ *
+ * @author Luke Taylor
+ * @version $Id$
+ * @since 2.5
+ */
+public class DefaultWebSecurityExpressionHandler implements WebSecurityExpressionHandler {
+
+    private AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
+    private ExpressionParser expressionParser = new SpelAntlrExpressionParser();
+
+    public ExpressionParser getExpressionParser() {
+        return expressionParser;
+    }
+
+    public EvaluationContext createEvaluationContext(Authentication authentication, FilterInvocation fi) {
+        StandardEvaluationContext ctx = new StandardEvaluationContext();
+        SecurityExpressionRoot root = new WebSecurityExpressionRoot(authentication, fi);
+        root.setTrustResolver(trustResolver);
+        ctx.setRootObject(root);
+
+        return ctx;
+    }
+}

+ 2 - 1
core/src/main/java/org/springframework/security/expression/support/WebSecurityExpressionRoot.java → web/src/main/java/org/springframework/security/expression/web/support/WebSecurityExpressionRoot.java

@@ -1,10 +1,11 @@
-package org.springframework.security.expression.support;
+package org.springframework.security.expression.web.support;
 
 
 import java.net.InetAddress;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.net.UnknownHostException;
 import java.util.Arrays;
 import java.util.Arrays;
 
 
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
+import org.springframework.security.expression.support.SecurityExpressionRoot;
 import org.springframework.security.intercept.web.FilterInvocation;
 import org.springframework.security.intercept.web.FilterInvocation;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 

+ 0 - 0
core/src/main/java/org/springframework/security/intercept/web/DefaultFilterInvocationSecurityMetadataSource.java → web/src/main/java/org/springframework/security/intercept/web/DefaultFilterInvocationSecurityMetadataSource.java


+ 2 - 2
core/src/main/java/org/springframework/security/intercept/web/FilterInvocation.java → web/src/main/java/org/springframework/security/intercept/web/FilterInvocation.java

@@ -15,7 +15,7 @@
 
 
 package org.springframework.security.intercept.web;
 package org.springframework.security.intercept.web;
 
 
-import org.springframework.security.util.UrlUtils;
+import org.springframework.security.web.util.UrlUtils;
 
 
 import javax.servlet.FilterChain;
 import javax.servlet.FilterChain;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletRequest;
@@ -65,7 +65,7 @@ public class FilterInvocation {
      * Indicates the URL that the user agent used for this request.
      * Indicates the URL that the user agent used for this request.
      * <p>
      * <p>
      * The returned URL does <b>not</b> reflect the port number determined from a
      * The returned URL does <b>not</b> reflect the port number determined from a
-     * {@link org.springframework.security.util.PortResolver}.
+     * {@link org.springframework.security.web.util.PortResolver}.
      *
      *
      * @return the full URL of this request
      * @return the full URL of this request
      */
      */

+ 0 - 0
core/src/main/java/org/springframework/security/intercept/web/FilterInvocationSecurityMetadataSource.java → web/src/main/java/org/springframework/security/intercept/web/FilterInvocationSecurityMetadataSource.java


+ 0 - 0
core/src/main/java/org/springframework/security/intercept/web/FilterSecurityInterceptor.java → web/src/main/java/org/springframework/security/intercept/web/FilterSecurityInterceptor.java


+ 0 - 0
core/src/main/java/org/springframework/security/intercept/web/RequestKey.java → web/src/main/java/org/springframework/security/intercept/web/RequestKey.java


+ 0 - 0
core/src/main/java/org/springframework/security/intercept/web/WebInvocationPrivilegeEvaluator.java → web/src/main/java/org/springframework/security/intercept/web/WebInvocationPrivilegeEvaluator.java


+ 0 - 0
core/src/main/java/org/springframework/security/intercept/web/package.html → web/src/main/java/org/springframework/security/intercept/web/package.html


+ 4 - 4
core/src/main/java/org/springframework/security/securechannel/AbstractRetryEntryPoint.java → web/src/main/java/org/springframework/security/securechannel/AbstractRetryEntryPoint.java

@@ -1,9 +1,9 @@
 package org.springframework.security.securechannel;
 package org.springframework.security.securechannel;
 
 
-import org.springframework.security.util.PortMapper;
-import org.springframework.security.util.PortResolver;
-import org.springframework.security.util.PortMapperImpl;
-import org.springframework.security.util.PortResolverImpl;
+import org.springframework.security.web.util.PortMapper;
+import org.springframework.security.web.util.PortMapperImpl;
+import org.springframework.security.web.util.PortResolver;
+import org.springframework.security.web.util.PortResolverImpl;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.Log;

+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/ChannelDecisionManager.java → web/src/main/java/org/springframework/security/securechannel/ChannelDecisionManager.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/ChannelDecisionManagerImpl.java → web/src/main/java/org/springframework/security/securechannel/ChannelDecisionManagerImpl.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/ChannelEntryPoint.java → web/src/main/java/org/springframework/security/securechannel/ChannelEntryPoint.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/ChannelProcessingFilter.java → web/src/main/java/org/springframework/security/securechannel/ChannelProcessingFilter.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/ChannelProcessor.java → web/src/main/java/org/springframework/security/securechannel/ChannelProcessor.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/InsecureChannelProcessor.java → web/src/main/java/org/springframework/security/securechannel/InsecureChannelProcessor.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/RetryWithHttpEntryPoint.java → web/src/main/java/org/springframework/security/securechannel/RetryWithHttpEntryPoint.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/RetryWithHttpsEntryPoint.java → web/src/main/java/org/springframework/security/securechannel/RetryWithHttpsEntryPoint.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/SecureChannelProcessor.java → web/src/main/java/org/springframework/security/securechannel/SecureChannelProcessor.java


+ 0 - 0
core/src/main/java/org/springframework/security/securechannel/package.html → web/src/main/java/org/springframework/security/securechannel/package.html


+ 2 - 2
core/src/main/java/org/springframework/security/ui/AbstractAuthenticationTargetUrlRequestHandler.java → web/src/main/java/org/springframework/security/ui/AbstractAuthenticationTargetUrlRequestHandler.java

@@ -12,8 +12,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.LogFactory;
 import org.springframework.security.Authentication;
 import org.springframework.security.Authentication;
 import org.springframework.security.ui.logout.LogoutHandler;
 import org.springframework.security.ui.logout.LogoutHandler;
-import org.springframework.security.util.RedirectUtils;
-import org.springframework.security.util.UrlUtils;
+import org.springframework.security.web.util.RedirectUtils;
+import org.springframework.security.web.util.UrlUtils;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 

+ 2 - 2
core/src/main/java/org/springframework/security/ui/AbstractProcessingFilter.java → web/src/main/java/org/springframework/security/ui/AbstractProcessingFilter.java

@@ -38,8 +38,8 @@ import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.event.authentication.InteractiveAuthenticationSuccessEvent;
 import org.springframework.security.event.authentication.InteractiveAuthenticationSuccessEvent;
 import org.springframework.security.ui.rememberme.NullRememberMeServices;
 import org.springframework.security.ui.rememberme.NullRememberMeServices;
 import org.springframework.security.ui.rememberme.RememberMeServices;
 import org.springframework.security.ui.rememberme.RememberMeServices;
-import org.springframework.security.util.SessionUtils;
-import org.springframework.security.util.UrlUtils;
+import org.springframework.security.web.util.SessionUtils;
+import org.springframework.security.web.util.UrlUtils;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 
 /**
 /**

+ 0 - 0
core/src/main/java/org/springframework/security/ui/AccessDeniedHandler.java → web/src/main/java/org/springframework/security/ui/AccessDeniedHandler.java


+ 0 - 0
core/src/main/java/org/springframework/security/ui/AccessDeniedHandlerImpl.java → web/src/main/java/org/springframework/security/ui/AccessDeniedHandlerImpl.java


+ 0 - 0
core/src/main/java/org/springframework/security/ui/AuthenticationEntryPoint.java → web/src/main/java/org/springframework/security/ui/AuthenticationEntryPoint.java


+ 0 - 0
core/src/main/java/org/springframework/security/ui/AuthenticationFailureHandler.java → web/src/main/java/org/springframework/security/ui/AuthenticationFailureHandler.java


+ 0 - 0
core/src/main/java/org/springframework/security/ui/AuthenticationSuccessHandler.java → web/src/main/java/org/springframework/security/ui/AuthenticationSuccessHandler.java


+ 2 - 2
core/src/main/java/org/springframework/security/ui/ExceptionMappingAuthenticationFailureHandler.java → web/src/main/java/org/springframework/security/ui/ExceptionMappingAuthenticationFailureHandler.java

@@ -9,8 +9,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
 
 import org.springframework.security.AuthenticationException;
 import org.springframework.security.AuthenticationException;
-import org.springframework.security.util.RedirectUtils;
-import org.springframework.security.util.UrlUtils;
+import org.springframework.security.web.util.RedirectUtils;
+import org.springframework.security.web.util.UrlUtils;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 
 /**
 /**

+ 3 - 3
core/src/main/java/org/springframework/security/ui/ExceptionTranslationFilter.java → web/src/main/java/org/springframework/security/ui/ExceptionTranslationFilter.java

@@ -23,10 +23,10 @@ import org.springframework.security.AuthenticationTrustResolverImpl;
 import org.springframework.security.InsufficientAuthenticationException;
 import org.springframework.security.InsufficientAuthenticationException;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.ui.savedrequest.SavedRequest;
 import org.springframework.security.ui.savedrequest.SavedRequest;
-import org.springframework.security.util.PortResolver;
-import org.springframework.security.util.PortResolverImpl;
 import org.springframework.security.util.ThrowableAnalyzer;
 import org.springframework.security.util.ThrowableAnalyzer;
 import org.springframework.security.util.ThrowableCauseExtractor;
 import org.springframework.security.util.ThrowableCauseExtractor;
+import org.springframework.security.web.util.PortResolver;
+import org.springframework.security.web.util.PortResolverImpl;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.InitializingBean;
 
 
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
@@ -176,7 +176,7 @@ public class ExceptionTranslationFilter extends SpringSecurityFilter implements
      * <code>false</code>.
      * <code>false</code>.
      * <p>
      * <p>
      * Remember to also set
      * Remember to also set
-     * {@link org.springframework.security.context.HttpSessionSecurityContextRepository#setAllowSessionCreation(boolean)}
+     * {@link org.springframework.security.context.web.HttpSessionSecurityContextRepository#setAllowSessionCreation(boolean)}
      * to <code>false</code> if you set this property to <code>false</code>.
      * to <code>false</code> if you set this property to <code>false</code>.
      *
      *
      * @return <code>true</code> if the <code>HttpSession</code> will be
      * @return <code>true</code> if the <code>HttpSession</code> will be

+ 0 - 0
core/src/main/java/org/springframework/security/ui/FilterChainOrder.java → web/src/main/java/org/springframework/security/ui/FilterChainOrder.java


部分文件因为文件数量过多而无法显示