Selaa lähdekoodia

Removal of deprecated methods and classes.

Luke Taylor 15 vuotta sitten
vanhempi
commit
026517f674
22 muutettua tiedostoa jossa 165 lisäystä ja 1021 poistoa
  1. 5 5
      config/src/test/java/org/springframework/security/intercept/method/aopalliance/MethodSecurityInterceptorWithAopConfigTests.java
  2. 4 4
      core/src/main/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityInterceptor.java
  3. 0 11
      core/src/main/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityMetadataSourceAdvisor.java
  4. 0 75
      core/src/main/java/org/springframework/security/access/method/MethodSecurityMetadataSourceEditor.java
  5. 2 11
      core/src/main/java/org/springframework/security/authentication/AnonymousAuthenticationToken.java
  6. 0 8
      core/src/main/java/org/springframework/security/authentication/UsernamePasswordAuthenticationToken.java
  7. 0 165
      core/src/main/java/org/springframework/security/util/EncryptionUtils.java
  8. 0 87
      core/src/test/java/org/springframework/security/access/annotation/MethodDefinitionSourceEditorTigerTests.java
  9. 11 32
      core/src/test/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityMetadataSourceAdvisorTests.java
  10. 0 224
      core/src/test/java/org/springframework/security/access/intercept/method/MethodSecurityMetadataSourceEditorTests.java
  11. 0 120
      core/src/test/java/org/springframework/security/util/EncryptionUtilsTests.java
  12. 115 113
      samples/dms/src/main/java/sample/dms/DataSourcePopulator.java
  13. 2 3
      samples/dms/src/main/java/sample/dms/secured/SecureDataSourcePopulator.java
  14. 0 1
      samples/dms/src/main/resources/applicationContext-dms-insecure.xml
  15. 18 15
      samples/dms/src/main/resources/applicationContext-dms-secure.xml
  16. 8 16
      web/src/main/java/org/springframework/security/web/access/intercept/FilterSecurityInterceptor.java
  17. 0 17
      web/src/main/java/org/springframework/security/web/authentication/AbstractProcessingFilter.java
  18. 0 14
      web/src/main/java/org/springframework/security/web/authentication/AuthenticationProcessingFilter.java
  19. 0 13
      web/src/main/java/org/springframework/security/web/authentication/AuthenticationProcessingFilterEntryPoint.java
  20. 0 15
      web/src/main/java/org/springframework/security/web/authentication/preauth/PreAuthenticatedProcessingFilterEntryPoint.java
  21. 0 34
      web/src/main/java/org/springframework/security/web/context/HttpSessionSecurityContextRepository.java
  22. 0 38
      web/src/test/java/org/springframework/security/web/context/HttpSessionSecurityContextRepositoryTests.java

+ 5 - 5
config/src/test/java/org/springframework/security/intercept/method/aopalliance/MethodSecurityInterceptorWithAopConfigTests.java

@@ -39,11 +39,11 @@ public class MethodSecurityInterceptorWithAopConfigTests {
         "<b:bean id='target' class='org.springframework.security.TargetObject'/>" +
         "<b:bean id='securityInterceptor' class='org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor' autowire='byType' >" +
         "     <b:property name='securityMetadataSource'>" +
-        "       <b:value>" +
-                    "org.springframework.security.ITargetObject.makeLower*=ROLE_A\n" +
-                    "org.springframework.security.TargetObject.makeUpper*=ROLE_A\n" +
-                    "org.springframework.security.ITargetObject.computeHashCode*=ROLE_B\n" +
-        "       </b:value>" +
+        "         <method-security-metadata-source>" +
+        "             <protect method='org.springframework.security.ITargetObject.makeLower*' access='ROLE_A'/>" +
+        "             <protect method='org.springframework.security.ITargetObject.makeUpper*' access='ROLE_A'/>" +
+        "             <protect method='org.springframework.security.ITargetObject.computeHashCode*' access='ROLE_B'/>" +
+        "         </method-security-metadata-source>" +
         "     </b:property>" +
         "</b:bean>";
 

+ 4 - 4
core/src/main/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityInterceptor.java

@@ -42,10 +42,6 @@ public class MethodSecurityInterceptor extends AbstractSecurityInterceptor imple
 
     //~ Methods ========================================================================================================
 
-    public MethodSecurityMetadataSource getSecurityMetadataSource() {
-        return this.securityMetadataSource;
-    }
-
     public Class<? extends Object> getSecureObjectClass() {
         return MethodInvocation.class;
     }
@@ -72,6 +68,10 @@ public class MethodSecurityInterceptor extends AbstractSecurityInterceptor imple
         return result;
     }
 
+    public MethodSecurityMetadataSource getSecurityMetadataSource() {
+        return this.securityMetadataSource;
+    }
+
     public SecurityMetadataSource obtainSecurityMetadataSource() {
         return this.securityMetadataSource;
     }

+ 0 - 11
core/src/main/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityMetadataSourceAdvisor.java

@@ -60,17 +60,6 @@ public class MethodSecurityMetadataSourceAdvisor extends AbstractPointcutAdvisor
 
     //~ Constructors ===================================================================================================
 
-    /**
-     * @deprecated use the decoupled approach instead
-     */
-    MethodSecurityMetadataSourceAdvisor(MethodSecurityInterceptor advice) {
-        Assert.notNull(advice.getSecurityMetadataSource(), "Cannot construct a MethodSecurityMetadataSourceAdvisor using a " +
-                "MethodSecurityInterceptor that has no SecurityMetadataSource configured");
-
-        this.interceptor = advice;
-        this.attributeSource = advice.getSecurityMetadataSource();
-    }
-
     /**
      * Alternative constructor for situations where we want the advisor decoupled from the advice. Instead the advice
      * bean name should be set. This prevents eager instantiation of the interceptor

+ 0 - 75
core/src/main/java/org/springframework/security/access/method/MethodSecurityMetadataSourceEditor.java

@@ -1,75 +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.access.method;
-
-import java.beans.PropertyEditorSupport;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import org.springframework.beans.propertyeditors.PropertiesEditor;
-import org.springframework.security.access.ConfigAttribute;
-import org.springframework.security.access.SecurityConfig;
-import org.springframework.util.StringUtils;
-
-
-/**
- * Property editor to assist with the setup of a {@link MethodSecurityMetadataSource}.
- * <p>
- * The class creates and populates a {@link MapBasedMethodSecurityMetadataSource}.
- *
- * @author Ben Alex
- * @deprecated use method annotations or the protect-pointcut support from the namespace
- */
-public class MethodSecurityMetadataSourceEditor extends PropertyEditorSupport {
-    //~ Methods ========================================================================================================
-
-    @SuppressWarnings("unchecked")
-    public void setAsText(String s) throws IllegalArgumentException {
-        if ((s == null) || "".equals(s)) {
-            setValue(new MapBasedMethodSecurityMetadataSource());
-            return;
-        }
-
-        // Use properties editor to tokenize the string
-        PropertiesEditor propertiesEditor = new PropertiesEditor();
-        propertiesEditor.setAsText(s);
-
-        Properties props = (Properties) propertiesEditor.getValue();
-
-        // Now we have properties, process each one individually
-        Map<String, List<ConfigAttribute>> mappings = new LinkedHashMap<String, List<ConfigAttribute>>();
-
-        for (Iterator iter = props.keySet().iterator(); iter.hasNext();) {
-            String name = (String) iter.next();
-            String value = props.getProperty(name);
-
-            String[] tokens = StringUtils.commaDelimitedListToStringArray(value);
-            List<ConfigAttribute> attributes = new ArrayList<ConfigAttribute>(tokens.length);
-
-            for(String token : tokens) {
-                attributes.add(new SecurityConfig(token));
-            }
-
-            mappings.put(name, attributes);
-        }
-
-        setValue(new MapBasedMethodSecurityMetadataSource(mappings));
-    }
-}

+ 2 - 11
core/src/main/java/org/springframework/security/authentication/AnonymousAuthenticationToken.java

@@ -15,13 +15,11 @@
 
 package org.springframework.security.authentication;
 
-import org.springframework.security.core.GrantedAuthority;
-
-
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.List;
 
+import org.springframework.security.core.GrantedAuthority;
+
 
 /**
  * Represents an anonymous <code>Authentication</code>.
@@ -37,13 +35,6 @@ public class AnonymousAuthenticationToken extends AbstractAuthenticationToken im
 
     //~ Constructors ===================================================================================================
 
-    /**
-     * @deprecated use the second constructor
-     */
-    public AnonymousAuthenticationToken(String key, Object principal, GrantedAuthority[] authorities) {
-        this(key, principal, Arrays.asList(authorities));
-    }
-
     /**
      * Constructor.
      *

+ 0 - 8
core/src/main/java/org/springframework/security/authentication/UsernamePasswordAuthenticationToken.java

@@ -15,7 +15,6 @@
 
 package org.springframework.security.authentication;
 
-import java.util.Arrays;
 import java.util.Collection;
 
 import org.springframework.security.core.GrantedAuthority;
@@ -52,13 +51,6 @@ public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationT
         setAuthenticated(false);
     }
 
-    /**
-     * @deprecated use the list of authorities version
-     */
-    public UsernamePasswordAuthenticationToken(Object principal, Object credentials, GrantedAuthority[] authorities) {
-        this(principal, credentials, Arrays.asList(authorities));
-    }
-
     /**
      * This constructor should only be used by <code>AuthenticationManager</code> or <code>AuthenticationProvider</code>
      * implementations that are satisfied with producing a trusted (i.e. {@link #isAuthenticated()} = <code>true</code>)

+ 0 - 165
core/src/main/java/org/springframework/security/util/EncryptionUtils.java

@@ -1,165 +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.UnsupportedEncodingException;
-import java.security.spec.KeySpec;
-
-import javax.crypto.Cipher;
-import javax.crypto.SecretKey;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.DESedeKeySpec;
-
-import org.springframework.core.NestedRuntimeException;
-import org.springframework.security.core.codec.Base64;
-import org.springframework.util.Assert;
-
-/**
- * A static utility class that can encrypt and decrypt text.
- *
- * <p>This class is useful if you have simple needs and wish to use the DESede
- * encryption cipher. More sophisticated requirements will need to use the
- * Java crypto libraries directly.
- *
- * @author Alan Stewart
- * @author Ben Alex
- * @deprecated Use a dedicated encryption library instead.
- */
-@Deprecated
-public final class EncryptionUtils {
-
-    /**
-     * This is a static class that should not be instantiated.
-     */
-    private EncryptionUtils() {}
-
-    /**
-     * Converts a String into a byte array using UTF-8, falling back to the
-     * platform's default character set if UTF-8 fails.
-     *
-     * @param input the input (required)
-     * @return a byte array representation of the input string
-     */
-    public static byte[] stringToByteArray(String input) {
-        Assert.hasLength(input, "Input required");
-        try {
-            return input.getBytes("UTF-8");
-        } catch (UnsupportedEncodingException fallbackToDefault) {
-            return input.getBytes();
-        }
-    }
-
-    /**
-     * Converts a byte array into a String using UTF-8, falling back to the
-     * platform's default character set if UTF-8 fails.
-     *
-     * @param byteArray the byte array to convert (required)
-     * @return a string representation of the byte array
-     */
-    public static String byteArrayToString(byte[] byteArray) {
-        Assert.notNull(byteArray, "ByteArray required");
-        Assert.isTrue(byteArray.length > 0, "ByteArray cannot be empty");
-        try {
-            return new String(byteArray, "UTF8");
-        } catch (final UnsupportedEncodingException e) {
-            return new String(byteArray);
-        }
-    }
-
-    private static byte[] cipher(String key, byte[] passedBytes, int cipherMode) throws EncryptionException {
-        try {
-            final KeySpec keySpec = new DESedeKeySpec(stringToByteArray(key));
-            final SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
-            final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
-            final SecretKey secretKey = keyFactory.generateSecret(keySpec);
-            cipher.init(cipherMode, secretKey);
-            return cipher.doFinal(passedBytes);
-        } catch (final Exception e) {
-            throw new EncryptionException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Encrypts the inputString using the key.
-     *
-     * @param key at least 24 character long key (required)
-     * @param inputString the string to encrypt (required)
-     * @return the encrypted version of the inputString
-     * @throws EncryptionException in the event of an encryption failure
-     */
-    public static String encrypt(String key, String inputString) throws EncryptionException {
-        isValidKey(key);
-        final byte[] cipherText = cipher(key, stringToByteArray(inputString), Cipher.ENCRYPT_MODE);
-        return byteArrayToString(Base64.encode(cipherText));
-    }
-
-    /**
-     * Encrypts the inputBytes using the key.
-     *
-     * @param key at least 24 character long key (required)
-     * @param inputBytes the bytes to encrypt (required)
-     * @return the encrypted version of the inputBytes
-     * @throws EncryptionException in the event of an encryption failure
-     */
-    public static byte[] encrypt(String key, byte[] inputBytes) throws EncryptionException {
-        isValidKey(key);
-        return Base64.encode(cipher(key, inputBytes, Cipher.ENCRYPT_MODE));
-    }
-
-    /**
-     * Decrypts the inputString using the key.
-     *
-     * @param key the key used to originally encrypt the string (required)
-     * @param inputString the encrypted string (required)
-     * @return the decrypted version of inputString
-     * @throws EncryptionException in the event of an encryption failure
-     */
-    public static String decrypt(String key, String inputString) throws EncryptionException {
-        Assert.hasText(key, "A key is required to attempt decryption");
-        final byte[] cipherText = cipher(key, Base64.decode(stringToByteArray(inputString)), Cipher.DECRYPT_MODE);
-        return byteArrayToString(cipherText);
-    }
-
-    /**
-     * Decrypts the inputBytes using the key.
-     *
-     * @param key the key used to originally encrypt the string (required)
-     * @param inputBytes the encrypted bytes (required)
-     * @return the decrypted version of inputBytes
-     * @throws EncryptionException in the event of an encryption failure
-     */
-    public static byte[] decrypt(String key, byte[] inputBytes) throws EncryptionException {
-        Assert.hasText(key, "A key is required to attempt decryption");
-        return cipher(key, Base64.decode(inputBytes), Cipher.DECRYPT_MODE);
-    }
-
-    private static void isValidKey(String key) {
-        Assert.hasText(key, "A key to perform the encryption is required");
-        Assert.isTrue(key.length() >= 24, "Key must be at least 24 characters long");
-    }
-
-    public static class EncryptionException extends NestedRuntimeException {
-        private static final long serialVersionUID = 1L;
-
-        public EncryptionException(String message, Throwable t) {
-            super(message, t);
-        }
-
-        public EncryptionException(String message) {
-            super(message);
-        }
-    }
-}

+ 0 - 87
core/src/test/java/org/springframework/security/access/annotation/MethodDefinitionSourceEditorTigerTests.java

@@ -1,87 +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.access.annotation;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.security.access.ConfigAttribute;
-import org.springframework.security.access.SecurityConfig;
-import org.springframework.security.access.annotation.test.Entity;
-import org.springframework.security.access.annotation.test.PersonServiceImpl;
-import org.springframework.security.access.annotation.test.Service;
-import org.springframework.security.access.intercept.method.MockMethodInvocation;
-import org.springframework.security.access.method.MapBasedMethodSecurityMetadataSource;
-import org.springframework.security.access.method.MethodSecurityMetadataSourceEditor;
-
-
-/**
- * Extra tests to demonstrate generics behaviour with <code>MapBasedMethodDefinitionSource</code>.
- *
- * @author Ben Alex
- */
-@SuppressWarnings("deprecation")
-public class MethodDefinitionSourceEditorTigerTests {
-    private MockMethodInvocation makeUpper;
-    private MockMethodInvocation makeLower;
-
-    @Before
-    public void createMethodInvocations() throws Exception {
-        makeUpper = new MockMethodInvocation(new PersonServiceImpl(), Service.class,"makeUpperCase", Entity.class);
-        makeLower = new MockMethodInvocation(new PersonServiceImpl(), Service.class,"makeLowerCase", Entity.class);
-    }
-
-    @Test
-    public void testConcreteClassInvocations() throws Exception {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText(
-                "org.springframework.security.access.annotation.test.Service.makeLower*=ROLE_FROM_INTERFACE\r\n" +
-                "org.springframework.security.access.annotation.test.Service.makeUpper*=ROLE_FROM_INTERFACE\r\n" +
-                "org.springframework.security.access.annotation.test.ServiceImpl.makeUpper*=ROLE_FROM_IMPLEMENTATION");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-        assertEquals(3, map.getMethodMapSize());
-
-        Collection<ConfigAttribute> returnedMakeLower = map.getAttributes(makeLower);
-        List<ConfigAttribute> expectedMakeLower = SecurityConfig.createList("ROLE_FROM_INTERFACE");
-        assertEquals(expectedMakeLower, returnedMakeLower);
-
-        Collection<ConfigAttribute> returnedMakeUpper = map.getAttributes(makeUpper);
-        List<ConfigAttribute> expectedMakeUpper = SecurityConfig.createList(new String[]{"ROLE_FROM_IMPLEMENTATION"});
-        assertEquals(expectedMakeUpper, returnedMakeUpper);
-    }
-
-    @Test
-    public void testBridgeMethodResolution() throws Exception {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText(
-                "org.springframework.security.access.annotation.test.PersonService.makeUpper*=ROLE_FROM_INTERFACE\r\n" +
-                "org.springframework.security.access.annotation.test.ServiceImpl.makeUpper*=ROLE_FROM_ABSTRACT\r\n" +
-                "org.springframework.security.access.annotation.test.PersonServiceImpl.makeUpper*=ROLE_FROM_PSI");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-        assertEquals(3, map.getMethodMapSize());
-
-        Collection<ConfigAttribute> returnedMakeUpper = map.getAttributes(makeUpper);
-        List<ConfigAttribute> expectedMakeUpper = SecurityConfig.createList("ROLE_FROM_PSI");
-        assertEquals(expectedMakeUpper, returnedMakeUpper);
-    }
-
-}

+ 11 - 32
core/src/test/java/org/springframework/security/access/intercept/aopalliance/MethodSecurityMetadataSourceAdvisorTests.java

@@ -15,43 +15,31 @@
 
 package org.springframework.security.access.intercept.aopalliance;
 
+import static org.mockito.Mockito.*;
+
 import java.lang.reflect.Method;
 
 import junit.framework.TestCase;
 
 import org.springframework.security.TargetObject;
-import org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor;
-import org.springframework.security.access.intercept.aopalliance.MethodSecurityMetadataSourceAdvisor;
-import org.springframework.security.access.method.MapBasedMethodSecurityMetadataSource;
-import org.springframework.security.access.method.MethodSecurityMetadataSourceEditor;
+import org.springframework.security.access.SecurityConfig;
+import org.springframework.security.access.method.MethodSecurityMetadataSource;
 
 /**
  * Tests {@link MethodSecurityMetadataSourceAdvisor}.
  *
  * @author Ben Alex
  */
-@SuppressWarnings("deprecation")
 public class MethodSecurityMetadataSourceAdvisorTests extends TestCase {
     //~ Methods ========================================================================================================
 
-    private MethodSecurityInterceptor getInterceptor() {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText("org.springframework.security.TargetObject.countLength=ROLE_NOT_USED");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-
-        MethodSecurityInterceptor msi = new MethodSecurityInterceptor();
-        msi.setSecurityMetadataSource(map);
-
-        return msi;
-    }
-
-    public void testAdvisorReturnsFalseWhenMethodInvocationNotDefined()
-        throws Exception {
+    public void testAdvisorReturnsFalseWhenMethodInvocationNotDefined() throws Exception {
         Class<TargetObject> clazz = TargetObject.class;
         Method method = clazz.getMethod("makeLowerCase", new Class[] {String.class});
 
-        MethodSecurityMetadataSourceAdvisor advisor = new MethodSecurityMetadataSourceAdvisor(getInterceptor());
+        MethodSecurityMetadataSource mds = mock(MethodSecurityMetadataSource.class);
+        when(mds.getAttributes(method, clazz)).thenReturn(null);
+        MethodSecurityMetadataSourceAdvisor advisor = new MethodSecurityMetadataSourceAdvisor("", mds ,"");
         assertFalse(advisor.getPointcut().getMethodMatcher().matches(method, clazz));
     }
 
@@ -60,18 +48,9 @@ public class MethodSecurityMetadataSourceAdvisorTests extends TestCase {
         Class<TargetObject> clazz = TargetObject.class;
         Method method = clazz.getMethod("countLength", new Class[] {String.class});
 
-        MethodSecurityMetadataSourceAdvisor advisor = new MethodSecurityMetadataSourceAdvisor(getInterceptor());
+        MethodSecurityMetadataSource mds = mock(MethodSecurityMetadataSource.class);
+        when(mds.getAttributes(method, clazz)).thenReturn(SecurityConfig.createList("ROLE_A"));
+        MethodSecurityMetadataSourceAdvisor advisor = new MethodSecurityMetadataSourceAdvisor("", mds ,"");
         assertTrue(advisor.getPointcut().getMethodMatcher().matches(method, clazz));
     }
-
-    public void testDetectsImproperlyConfiguredAdvice() {
-        MethodSecurityInterceptor msi = new MethodSecurityInterceptor();
-
-        try {
-            new MethodSecurityMetadataSourceAdvisor(msi);
-            fail("Should have detected null SecurityMetadataSource and thrown AopConfigException");
-        } catch (IllegalArgumentException expected) {
-            assertTrue(true);
-        }
-    }
 }

+ 0 - 224
core/src/test/java/org/springframework/security/access/intercept/method/MethodSecurityMetadataSourceEditorTests.java

@@ -1,224 +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.access.intercept.method;
-
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.aopalliance.intercept.MethodInvocation;
-import org.springframework.security.ITargetObject;
-import org.springframework.security.OtherTargetObject;
-import org.springframework.security.TargetObject;
-import org.springframework.security.access.ConfigAttribute;
-import org.springframework.security.access.SecurityConfig;
-import org.springframework.security.access.method.MapBasedMethodSecurityMetadataSource;
-import org.springframework.security.access.method.MethodSecurityMetadataSourceEditor;
-
-
-/**
- * Tests {@link MethodSecurityMetadataSourceEditor} and its associated {@link MapBasedMethodSecurityMetadataSource}.
- *
- * @author Ben Alex
- */
-@SuppressWarnings("deprecation")
-public class MethodSecurityMetadataSourceEditorTests extends TestCase {
-    //~ Methods ========================================================================================================
-
-    public final void setUp() throws Exception {
-        super.setUp();
-    }
-
-    public void testClassNameNotFoundResultsInException() {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-
-        try {
-            editor.setAsText("org.springframework.security.DOES_NOT_EXIST_NAME=FOO,BAR");
-            fail("Should have given IllegalArgumentException");
-        } catch (IllegalArgumentException expected) {
-            assertTrue(true);
-        }
-    }
-
-    public void testClassNameNotInProperFormatResultsInException() {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-
-        try {
-            editor.setAsText("DOES_NOT_EXIST_NAME=FOO,BAR");
-            fail("Should have given IllegalArgumentException");
-        } catch (IllegalArgumentException expected) {
-            assertTrue(true);
-        }
-    }
-
-    public void testClassNameValidButMethodNameInvalidResultsInException() {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-
-        try {
-            editor.setAsText("org.springframework.security.TargetObject.INVALID_METHOD=FOO,BAR");
-            fail("Should have given IllegalArgumentException");
-        } catch (IllegalArgumentException expected) {
-            assertTrue(true);
-        }
-    }
-
-    public void testConcreteClassInvocationsAlsoReturnDefinitionsAgainstInterface() throws Exception {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText(
-            "org.springframework.security.ITargetObject.computeHashCode*=ROLE_FROM_INTERFACE\r\n" +
-            "org.springframework.security.ITargetObject.makeLower*=ROLE_FROM_INTERFACE\r\n" +
-            "org.springframework.security.ITargetObject.makeUpper*=ROLE_FROM_INTERFACE\r\n" +
-            "org.springframework.security.TargetObject.computeHashCode*=ROLE_FROM_TO\r\n" +
-            "org.springframework.security.OtherTargetObject.computeHashCode*=ROLE_FROM_OTO\r\n" +
-            "org.springframework.security.OtherTargetObject.makeUpper*=ROLE_FROM_IMPLEMENTATION");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-        assertEquals(6, map.getMethodMapSize());
-
-        Collection<ConfigAttribute> returnedMakeLower = map.getAttributes(new MockMethodInvocation(ITargetObject.class, "makeLowerCase", new Class[] {String.class}, new OtherTargetObject()));
-        List<ConfigAttribute> expectedMakeLower = SecurityConfig.createList("ROLE_FROM_INTERFACE");
-        assertEquals(expectedMakeLower, returnedMakeLower);
-
-        Collection<ConfigAttribute> returnedMakeUpper = map.getAttributes(new MockMethodInvocation(ITargetObject.class, "makeUpperCase", new Class[] {String.class}, new OtherTargetObject()));
-        List<ConfigAttribute> expectedMakeUpper = SecurityConfig.createList("ROLE_FROM_IMPLEMENTATION");
-        assertEquals(expectedMakeUpper, returnedMakeUpper);
-
-        Collection<ConfigAttribute> returnedComputeHashCode = map.getAttributes(new MockMethodInvocation(ITargetObject.class, "computeHashCode", new Class[] {String.class}, new OtherTargetObject()));
-        List<ConfigAttribute> expectedComputeHashCode = SecurityConfig.createList("ROLE_FROM_OTO");
-        assertEquals(expectedComputeHashCode, returnedComputeHashCode);
-
-        returnedComputeHashCode = map.getAttributes(new MockMethodInvocation(ITargetObject.class, "computeHashCode", new Class[] {String.class}, new TargetObject()));
-        expectedComputeHashCode = SecurityConfig.createList("ROLE_FROM_TO");
-        assertEquals(expectedComputeHashCode, returnedComputeHashCode);
-    }
-
-    public void testEmptyStringReturnsEmptyMap() {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText("");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-        assertEquals(0, map.getMethodMapSize());
-    }
-
-    public void testIterator() {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText(
-            "org.springframework.security.TargetObject.countLength=ROLE_ONE,ROLE_TWO,RUN_AS_ENTRY\r\norg.springframework.security.TargetObject.make*=ROLE_NINE,ROLE_SUPERVISOR");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-
-        assertEquals(5, map.getAllConfigAttributes().size());
-    }
-
-    public void testMultiMethodParsing() {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText(
-            "org.springframework.security.TargetObject.countLength=ROLE_ONE,ROLE_TWO,RUN_AS_ENTRY\r\norg.springframework.security.TargetObject.make*=ROLE_NINE,ROLE_SUPERVISOR");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-        assertEquals(3, map.getMethodMapSize());
-    }
-
-    public void testMultiMethodParsingWhereLaterMethodsOverrideEarlierMethods() throws Exception {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText(
-            "org.springframework.security.TargetObject.*=ROLE_GENERAL\r\norg.springframework.security.TargetObject.makeLower*=ROLE_LOWER\r\norg.springframework.security.TargetObject.make*=ROLE_MAKE\r\norg.springframework.security.TargetObject.makeUpper*=ROLE_UPPER");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-        assertEquals(14, map.getMethodMapSize());
-
-        Collection<ConfigAttribute> returnedMakeLower = map.getAttributes(new MockMethodInvocation(ITargetObject.class,
-                    "makeLowerCase", new Class[] {String.class}, new TargetObject()));
-        List<ConfigAttribute> expectedMakeLower = SecurityConfig.createList("ROLE_LOWER");
-        assertEquals(expectedMakeLower, returnedMakeLower);
-
-        Collection<ConfigAttribute> returnedMakeUpper = map.getAttributes(new MockMethodInvocation(ITargetObject.class,
-                    "makeUpperCase", new Class[] {String.class}, new TargetObject()));
-        List<ConfigAttribute> expectedMakeUpper = SecurityConfig.createList("ROLE_UPPER");
-        assertEquals(expectedMakeUpper, returnedMakeUpper);
-
-        Collection<ConfigAttribute> returnedCountLength = map.getAttributes(new MockMethodInvocation(ITargetObject.class,
-                    "countLength", new Class[] {String.class}, new TargetObject()));
-        List<ConfigAttribute> expectedCountLength = SecurityConfig.createList("ROLE_GENERAL");
-        assertEquals(expectedCountLength, returnedCountLength);
-    }
-
-    public void testNullIsReturnedByMethodSecurityMetadataSourceWhenMethodInvocationNotDefined() throws Exception {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText("org.springframework.security.TargetObject.countLength=ROLE_ONE,ROLE_TWO,RUN_AS_ENTRY");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-
-        Collection<ConfigAttribute> configAttributeDefinition = map.getAttributes(new MockMethodInvocation(
-                    ITargetObject.class, "makeLowerCase", new Class[] {String.class}, new TargetObject()));
-        assertNull(configAttributeDefinition);
-    }
-
-    public void testNullReturnsEmptyMap() {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText(null);
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-        assertEquals(0, map.getMethodMapSize());
-    }
-
-    public void testSingleMethodParsing() throws Exception {
-        MethodSecurityMetadataSourceEditor editor = new MethodSecurityMetadataSourceEditor();
-        editor.setAsText("org.springframework.security.TargetObject.countLength=ROLE_ONE,ROLE_TWO,RUN_AS_ENTRY");
-
-        MapBasedMethodSecurityMetadataSource map = (MapBasedMethodSecurityMetadataSource) editor.getValue();
-
-        Collection<ConfigAttribute> returnedCountLength = map.getAttributes(new MockMethodInvocation(ITargetObject.class,
-                    "countLength", new Class[] {String.class}, new TargetObject()));
-        assertEquals(SecurityConfig.createList("ROLE_ONE", "ROLE_TWO", "RUN_AS_ENTRY"), returnedCountLength);
-    }
-
-    //~ Inner Classes ==================================================================================================
-
-    private class MockMethodInvocation implements MethodInvocation {
-        private Method method;
-        private Object targetObject;
-
-        public MockMethodInvocation(Class<?> clazz, String methodName, Class<?>[] parameterTypes, Object targetObject)
-            throws NoSuchMethodException {
-            this.method = clazz.getMethod(methodName, parameterTypes);
-            this.targetObject = targetObject;
-        }
-
-        public Object[] getArguments() {
-            return null;
-        }
-
-        public Method getMethod() {
-            return method;
-        }
-
-        public AccessibleObject getStaticPart() {
-            return null;
-        }
-
-        public Object getThis() {
-            return targetObject;
-        }
-
-        public Object proceed() throws Throwable {
-            return null;
-        }
-    }
-}

+ 0 - 120
core/src/test/java/org/springframework/security/util/EncryptionUtilsTests.java

@@ -1,120 +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 junit.framework.TestCase;
-
-import org.springframework.security.util.EncryptionUtils.EncryptionException;
-
-/**
- * JUnit tests for EncryptionUtils.
- *
- * @author Alan Stewart
- * @author Ben Alex
- */
-@SuppressWarnings("deprecation")
-public class EncryptionUtilsTests extends TestCase {
-    private final static String STRING_TO_ENCRYPT = "Alan K Stewart";
-    private final static String ENCRYPTION_KEY = "123456789012345678901234567890";
-
-    public void testEncryptsUsingDESEde() throws EncryptionException {
-        final String encryptedString = EncryptionUtils.encrypt(ENCRYPTION_KEY, STRING_TO_ENCRYPT);
-        assertEquals("3YIE8sIbaEoqGZZrHamFGQ==", encryptedString);
-    }
-
-    public void testEncryptByteArrayUsingDESEde() {
-        final byte[] encryptedArray = EncryptionUtils.encrypt(ENCRYPTION_KEY, EncryptionUtils.stringToByteArray(STRING_TO_ENCRYPT));
-        assertEquals("3YIE8sIbaEoqGZZrHamFGQ==", EncryptionUtils.byteArrayToString(encryptedArray));
-    }
-
-    public void testEncryptionKeyCanContainLetters() throws EncryptionException {
-        final String encryptedString = EncryptionUtils.encrypt("ASDF asdf 1234 8983 jklasdf J2Jaf8", STRING_TO_ENCRYPT);
-        assertEquals("v4+DQoClx6qm5tJwBcRrkw==", encryptedString);
-    }
-
-    public void testDecryptsUsingDESEde() throws EncryptionException {
-        final String encryptedString = "3YIE8sIbaEoqGZZrHamFGQ==";
-        final String decryptedString = EncryptionUtils.decrypt(ENCRYPTION_KEY, encryptedString);
-        assertEquals(STRING_TO_ENCRYPT, decryptedString);
-    }
-
-    public void testDecryptByteArrayUsingDESEde() {
-        final byte[] encrypted = EncryptionUtils.stringToByteArray("3YIE8sIbaEoqGZZrHamFGQ==");
-        final byte[] decrypted = EncryptionUtils.decrypt(ENCRYPTION_KEY, encrypted);
-        assertEquals(STRING_TO_ENCRYPT, EncryptionUtils.byteArrayToString(decrypted));
-    }
-
-    public void testFailEncryptWithNullEncryptionKey() {
-        try {
-            EncryptionUtils.encrypt(null, STRING_TO_ENCRYPT);
-            fail();
-        } catch (IllegalArgumentException e) {
-            assertTrue(true);
-        }
-    }
-
-    public void testFailEncryptWithEmptyEncryptionKey() {
-        try {
-            EncryptionUtils.encrypt("", STRING_TO_ENCRYPT);
-            fail();
-        } catch (IllegalArgumentException e) {
-            assertTrue(true);
-        }
-    }
-
-    public void teastFailEncryptWithShortEncryptionKey() {
-        try {
-            EncryptionUtils.encrypt("01234567890123456789012", STRING_TO_ENCRYPT);
-            fail();
-        } catch (IllegalArgumentException e) {
-            assertTrue(true);
-        }
-    }
-
-    public void testFailDecryptWithEmptyString() {
-        try {
-            EncryptionUtils.decrypt(ENCRYPTION_KEY, "");
-            fail();
-        } catch (IllegalArgumentException e) {
-            assertTrue(true);
-        }
-    }
-
-    public void testFailEncryptWithEmptyString() {
-        try {
-            EncryptionUtils.encrypt(ENCRYPTION_KEY, "");
-            fail();
-        } catch (IllegalArgumentException e) {
-            assertTrue(true);
-        }
-    }
-
-    public void testFailEncryptWithNullString() {
-        try {
-            EncryptionUtils.encrypt(ENCRYPTION_KEY, (String) null);
-            fail();
-        } catch (IllegalArgumentException e) {
-            assertTrue(true);
-        }
-    }
-
-    public void testEncryptAndDecrypt() throws EncryptionException {
-        final String stringToEncrypt = "Alan Stewart";
-        final String encryptedString = EncryptionUtils.encrypt(ENCRYPTION_KEY, stringToEncrypt);
-        final String decryptedString = EncryptionUtils.decrypt(ENCRYPTION_KEY, encryptedString);
-        assertEquals(stringToEncrypt, decryptedString);
-    }
-}

+ 115 - 113
samples/dms/src/main/java/sample/dms/DataSourcePopulator.java

@@ -8,10 +8,6 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.authority.AuthorityUtils;
 import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.transaction.support.TransactionCallback;
-import org.springframework.transaction.support.TransactionTemplate;
 import org.springframework.util.Assert;
 
 
@@ -27,122 +23,128 @@ public class DataSourcePopulator implements InitializingBean {
     protected static final int LEVEL_GRANT_ADMIN = 3;
     protected JdbcTemplate template;
     protected DocumentDao documentDao;
-    protected TransactionTemplate tt;
 
-    public DataSourcePopulator(DataSource dataSource, DocumentDao documentDao, PlatformTransactionManager platformTransactionManager) {
+    public DataSourcePopulator(DataSource dataSource, DocumentDao documentDao) {
        Assert.notNull(dataSource, "DataSource required");
        Assert.notNull(documentDao, "DocumentDao required");
-       Assert.notNull(platformTransactionManager, "PlatformTransactionManager required");
        this.template = new JdbcTemplate(dataSource);
        this.documentDao = documentDao;
-       this.tt = new TransactionTemplate(platformTransactionManager);
-   }
+    }
 
     public void afterPropertiesSet() throws Exception {
-           // ACL tables
-           template.execute("CREATE TABLE ACL_SID(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY,PRINCIPAL BOOLEAN NOT NULL,SID VARCHAR_IGNORECASE(100) NOT NULL,CONSTRAINT UNIQUE_UK_1 UNIQUE(SID,PRINCIPAL));");
-           template.execute("CREATE TABLE ACL_CLASS(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY,CLASS VARCHAR_IGNORECASE(100) NOT NULL,CONSTRAINT UNIQUE_UK_2 UNIQUE(CLASS));");
-           template.execute("CREATE TABLE ACL_OBJECT_IDENTITY(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY,OBJECT_ID_CLASS BIGINT NOT NULL,OBJECT_ID_IDENTITY BIGINT NOT NULL,PARENT_OBJECT BIGINT,OWNER_SID BIGINT,ENTRIES_INHERITING BOOLEAN NOT NULL,CONSTRAINT UNIQUE_UK_3 UNIQUE(OBJECT_ID_CLASS,OBJECT_ID_IDENTITY),CONSTRAINT FOREIGN_FK_1 FOREIGN KEY(PARENT_OBJECT)REFERENCES ACL_OBJECT_IDENTITY(ID),CONSTRAINT FOREIGN_FK_2 FOREIGN KEY(OBJECT_ID_CLASS)REFERENCES ACL_CLASS(ID),CONSTRAINT FOREIGN_FK_3 FOREIGN KEY(OWNER_SID)REFERENCES ACL_SID(ID));");
-           template.execute("CREATE TABLE ACL_ENTRY(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY,ACL_OBJECT_IDENTITY BIGINT NOT NULL,ACE_ORDER INT NOT NULL,SID BIGINT NOT NULL,MASK INTEGER NOT NULL,GRANTING BOOLEAN NOT NULL,AUDIT_SUCCESS BOOLEAN NOT NULL,AUDIT_FAILURE BOOLEAN NOT NULL,CONSTRAINT UNIQUE_UK_4 UNIQUE(ACL_OBJECT_IDENTITY,ACE_ORDER),CONSTRAINT FOREIGN_FK_4 FOREIGN KEY(ACL_OBJECT_IDENTITY) REFERENCES ACL_OBJECT_IDENTITY(ID),CONSTRAINT FOREIGN_FK_5 FOREIGN KEY(SID) REFERENCES ACL_SID(ID));");
-
-           // Normal authentication tables
-           template.execute("CREATE TABLE USERS(USERNAME VARCHAR_IGNORECASE(50) NOT NULL PRIMARY KEY,PASSWORD VARCHAR_IGNORECASE(50) NOT NULL,ENABLED BOOLEAN NOT NULL);");
-           template.execute("CREATE TABLE AUTHORITIES(USERNAME VARCHAR_IGNORECASE(50) NOT NULL,AUTHORITY VARCHAR_IGNORECASE(50) NOT NULL,CONSTRAINT FK_AUTHORITIES_USERS FOREIGN KEY(USERNAME) REFERENCES USERS(USERNAME));");
-           template.execute("CREATE UNIQUE INDEX IX_AUTH_USERNAME ON AUTHORITIES(USERNAME,AUTHORITY);");
-
-           // Document management system business tables
-           template.execute("CREATE TABLE DIRECTORY(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY, DIRECTORY_NAME VARCHAR_IGNORECASE(50) NOT NULL, PARENT_DIRECTORY_ID BIGINT)");
-           template.execute("CREATE TABLE FILE(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY, FILE_NAME VARCHAR_IGNORECASE(50) NOT NULL, CONTENT VARCHAR_IGNORECASE(1024), PARENT_DIRECTORY_ID BIGINT)");
-
-           // Populate the authentication and role tables
-           template.execute("INSERT INTO USERS VALUES('rod','a564de63c2d0da68cf47586ee05984d7',TRUE);");
-           template.execute("INSERT INTO USERS VALUES('dianne','65d15fe9156f9c4bbffd98085992a44e',TRUE);");
-           template.execute("INSERT INTO USERS VALUES('scott','2b58af6dddbd072ed27ffc86725d7d3a',TRUE);");
-           template.execute("INSERT INTO USERS VALUES('peter','22b5c9accc6e1ba628cedc63a72d57f8',FALSE);");
-           template.execute("INSERT INTO USERS VALUES('bill','2b58af6dddbd072ed27ffc86725d7d3a',TRUE);");
-           template.execute("INSERT INTO USERS VALUES('bob','2b58af6dddbd072ed27ffc86725d7d3a',TRUE);");
-           template.execute("INSERT INTO USERS VALUES('jane','2b58af6dddbd072ed27ffc86725d7d3a',TRUE);");
-           template.execute("INSERT INTO AUTHORITIES VALUES('rod','ROLE_USER');");
-           template.execute("INSERT INTO AUTHORITIES VALUES('rod','ROLE_SUPERVISOR');");
-           template.execute("INSERT INTO AUTHORITIES VALUES('dianne','ROLE_USER');");
-           template.execute("INSERT INTO AUTHORITIES VALUES('scott','ROLE_USER');");
-           template.execute("INSERT INTO AUTHORITIES VALUES('peter','ROLE_USER');");
-           template.execute("INSERT INTO AUTHORITIES VALUES('bill','ROLE_USER');");
-           template.execute("INSERT INTO AUTHORITIES VALUES('bob','ROLE_USER');");
-           template.execute("INSERT INTO AUTHORITIES VALUES('jane','ROLE_USER');");
-
-           // Now create an ACL entry for the root directory
-           SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken("rod", "ignored", AuthorityUtils.createAuthorityList(("ROLE_IGNORED"))));
-           tt.execute(new TransactionCallback<Object>() {
-               public Object doInTransaction(TransactionStatus arg0) {
-                   addPermission(documentDao, Directory.ROOT_DIRECTORY, "ROLE_USER", LEVEL_GRANT_WRITE);
-                   return null;
-               }
-           });
-
-           // Now go off and create some directories and files for our users
-           createSampleData("rod", "koala");
-           createSampleData("dianne", "emu");
-           createSampleData("scott", "wombat");
+        // ACL tables
+        template.execute("CREATE TABLE ACL_SID(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY,PRINCIPAL BOOLEAN NOT NULL,SID VARCHAR_IGNORECASE(100) NOT NULL,CONSTRAINT UNIQUE_UK_1 UNIQUE(SID,PRINCIPAL));");
+        template.execute("CREATE TABLE ACL_CLASS(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY,CLASS VARCHAR_IGNORECASE(100) NOT NULL,CONSTRAINT UNIQUE_UK_2 UNIQUE(CLASS));");
+        template.execute("CREATE TABLE ACL_OBJECT_IDENTITY(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY,OBJECT_ID_CLASS BIGINT NOT NULL,OBJECT_ID_IDENTITY BIGINT NOT NULL,PARENT_OBJECT BIGINT,OWNER_SID BIGINT,ENTRIES_INHERITING BOOLEAN NOT NULL,CONSTRAINT UNIQUE_UK_3 UNIQUE(OBJECT_ID_CLASS,OBJECT_ID_IDENTITY),CONSTRAINT FOREIGN_FK_1 FOREIGN KEY(PARENT_OBJECT)REFERENCES ACL_OBJECT_IDENTITY(ID),CONSTRAINT FOREIGN_FK_2 FOREIGN KEY(OBJECT_ID_CLASS)REFERENCES ACL_CLASS(ID),CONSTRAINT FOREIGN_FK_3 FOREIGN KEY(OWNER_SID)REFERENCES ACL_SID(ID));");
+        template.execute("CREATE TABLE ACL_ENTRY(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY,ACL_OBJECT_IDENTITY BIGINT NOT NULL,ACE_ORDER INT NOT NULL,SID BIGINT NOT NULL,MASK INTEGER NOT NULL,GRANTING BOOLEAN NOT NULL,AUDIT_SUCCESS BOOLEAN NOT NULL,AUDIT_FAILURE BOOLEAN NOT NULL,CONSTRAINT UNIQUE_UK_4 UNIQUE(ACL_OBJECT_IDENTITY,ACE_ORDER),CONSTRAINT FOREIGN_FK_4 FOREIGN KEY(ACL_OBJECT_IDENTITY) REFERENCES ACL_OBJECT_IDENTITY(ID),CONSTRAINT FOREIGN_FK_5 FOREIGN KEY(SID) REFERENCES ACL_SID(ID));");
+
+        // Normal authentication tables
+        template.execute("CREATE TABLE USERS(USERNAME VARCHAR_IGNORECASE(50) NOT NULL PRIMARY KEY,PASSWORD VARCHAR_IGNORECASE(50) NOT NULL,ENABLED BOOLEAN NOT NULL);");
+        template.execute("CREATE TABLE AUTHORITIES(USERNAME VARCHAR_IGNORECASE(50) NOT NULL,AUTHORITY VARCHAR_IGNORECASE(50) NOT NULL,CONSTRAINT FK_AUTHORITIES_USERS FOREIGN KEY(USERNAME) REFERENCES USERS(USERNAME));");
+        template.execute("CREATE UNIQUE INDEX IX_AUTH_USERNAME ON AUTHORITIES(USERNAME,AUTHORITY);");
+
+        // Document management system business tables
+        template.execute("CREATE TABLE DIRECTORY(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY, DIRECTORY_NAME VARCHAR_IGNORECASE(50) NOT NULL, PARENT_DIRECTORY_ID BIGINT)");
+        template.execute("CREATE TABLE FILE(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY, FILE_NAME VARCHAR_IGNORECASE(50) NOT NULL, CONTENT VARCHAR_IGNORECASE(1024), PARENT_DIRECTORY_ID BIGINT)");
+
+        // Populate the authentication and role tables
+        template.execute("INSERT INTO USERS VALUES('rod','a564de63c2d0da68cf47586ee05984d7',TRUE);");
+        template.execute("INSERT INTO USERS VALUES('dianne','65d15fe9156f9c4bbffd98085992a44e',TRUE);");
+        template.execute("INSERT INTO USERS VALUES('scott','2b58af6dddbd072ed27ffc86725d7d3a',TRUE);");
+        template.execute("INSERT INTO USERS VALUES('peter','22b5c9accc6e1ba628cedc63a72d57f8',FALSE);");
+        template.execute("INSERT INTO USERS VALUES('bill','2b58af6dddbd072ed27ffc86725d7d3a',TRUE);");
+        template.execute("INSERT INTO USERS VALUES('bob','2b58af6dddbd072ed27ffc86725d7d3a',TRUE);");
+        template.execute("INSERT INTO USERS VALUES('jane','2b58af6dddbd072ed27ffc86725d7d3a',TRUE);");
+        template.execute("INSERT INTO AUTHORITIES VALUES('rod','ROLE_USER');");
+        template.execute("INSERT INTO AUTHORITIES VALUES('rod','ROLE_SUPERVISOR');");
+        template.execute("INSERT INTO AUTHORITIES VALUES('dianne','ROLE_USER');");
+        template.execute("INSERT INTO AUTHORITIES VALUES('scott','ROLE_USER');");
+        template.execute("INSERT INTO AUTHORITIES VALUES('peter','ROLE_USER');");
+        template.execute("INSERT INTO AUTHORITIES VALUES('bill','ROLE_USER');");
+        template.execute("INSERT INTO AUTHORITIES VALUES('bob','ROLE_USER');");
+        template.execute("INSERT INTO AUTHORITIES VALUES('jane','ROLE_USER');");
+
+        // Now create an ACL entry for the root directory
+        SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken("rod", "ignored", AuthorityUtils.createAuthorityList(("ROLE_IGNORED"))));
+
+        addPermission(documentDao, Directory.ROOT_DIRECTORY, "ROLE_USER", LEVEL_GRANT_WRITE);
+
+        // Now go off and create some directories and files for our users
+        createSampleData("rod", "koala");
+        createSampleData("dianne", "emu");
+        createSampleData("scott", "wombat");
+
     }
 
-   /**
-    * Creates a directory for the user, and a series of sub-directories. The root directory is the parent for the user directory. The sub-directories
-    * are "confidential" and "shared". The ROLE_USER will be given read and write access to "shared".
-    */
-   private void createSampleData(String username, String password) {
-       Assert.notNull(documentDao, "DocumentDao required");
-       Assert.hasText(username, "Username required");
-
-       Authentication auth = new UsernamePasswordAuthenticationToken(username, password);
-
-       try {
-           // Set the SecurityContextHolder ThreadLocal so any subclasses automatically know which user is operating
-           SecurityContextHolder.getContext().setAuthentication(auth);
-
-           // Create the home directory first
-           Directory home = new Directory(username, Directory.ROOT_DIRECTORY);
-           documentDao.create(home);
-           addPermission(documentDao, home, username, LEVEL_GRANT_ADMIN);
-           addPermission(documentDao, home, "ROLE_USER", LEVEL_GRANT_READ);
-           createFiles(documentDao, home);
-
-           // Now create the confidential directory
-           Directory confid = new Directory("confidential", home);
-           documentDao.create(confid);
-           addPermission(documentDao, confid, "ROLE_USER", LEVEL_NEGATE_READ);
-           createFiles(documentDao, confid);
-
-           // Now create the shared directory
-           Directory shared = new Directory("shared", home);
-           documentDao.create(shared);
-           addPermission(documentDao, shared, "ROLE_USER", LEVEL_GRANT_READ);
-           addPermission(documentDao, shared, "ROLE_USER", LEVEL_GRANT_WRITE);
-           createFiles(documentDao, shared);
-       } finally {
-           // Clear the SecurityContextHolder ThreadLocal so future calls are guaranteed to be clean
-           SecurityContextHolder.clearContext();
-       }
-   }
-
-   private void createFiles(DocumentDao documentDao, Directory parent) {
-       Assert.notNull(documentDao, "DocumentDao required");
-       Assert.notNull(parent, "Parent required");
-       int countBeforeInsert = documentDao.findElements(parent).length;
-       for (int i = 0; i < 10; i++) {
-           File file = new File("file_" + i + ".txt", parent);
-           documentDao.create(file);
-       }
-       Assert.isTrue(countBeforeInsert + 10 == documentDao.findElements(parent).length, "Failed to increase count by 10");
-   }
-
-   /**
-    * Allows subclass to add permissions.
-    *
-    * @param documentDao that will presumably offer methods to enable the operation to be completed
-    * @param element to the subject of the new permissions
-    * @param recipient to receive permission (if it starts with ROLE_ it is assumed to be a GrantedAuthority, else it is a username)
-    * @param level based on the static final integer fields on this class
-    */
-   protected void addPermission(DocumentDao documentDao, AbstractElement element, String recipient, int level) {}
+    /**
+     * Creates a directory for the user, and a series of sub-directories. The
+     * root directory is the parent for the user directory. The sub-directories
+     * are "confidential" and "shared". The ROLE_USER will be given read and
+     * write access to "shared".
+     */
+    private void createSampleData(String username, String password) {
+        Assert.notNull(documentDao, "DocumentDao required");
+        Assert.hasText(username, "Username required");
+
+        Authentication auth = new UsernamePasswordAuthenticationToken(username, password);
+
+        try {
+            // Set the SecurityContextHolder ThreadLocal so any subclasses
+            // automatically know which user is operating
+            SecurityContextHolder.getContext().setAuthentication(auth);
+
+            // Create the home directory first
+            Directory home = new Directory(username, Directory.ROOT_DIRECTORY);
+            documentDao.create(home);
+            addPermission(documentDao, home, username, LEVEL_GRANT_ADMIN);
+            addPermission(documentDao, home, "ROLE_USER", LEVEL_GRANT_READ);
+            createFiles(documentDao, home);
+
+            // Now create the confidential directory
+            Directory confid = new Directory("confidential", home);
+            documentDao.create(confid);
+            addPermission(documentDao, confid, "ROLE_USER", LEVEL_NEGATE_READ);
+            createFiles(documentDao, confid);
+
+            // Now create the shared directory
+            Directory shared = new Directory("shared", home);
+            documentDao.create(shared);
+            addPermission(documentDao, shared, "ROLE_USER", LEVEL_GRANT_READ);
+            addPermission(documentDao, shared, "ROLE_USER", LEVEL_GRANT_WRITE);
+            createFiles(documentDao, shared);
+        } finally {
+            // Clear the SecurityContextHolder ThreadLocal so future calls are
+            // guaranteed to be clean
+            SecurityContextHolder.clearContext();
+        }
+    }
+
+    private void createFiles(DocumentDao documentDao, Directory parent) {
+        Assert.notNull(documentDao, "DocumentDao required");
+        Assert.notNull(parent, "Parent required");
+        int countBeforeInsert = documentDao.findElements(parent).length;
+        for (int i = 0; i < 10; i++) {
+            File file = new File("file_" + i + ".txt", parent);
+            documentDao.create(file);
+        }
+        Assert.isTrue(countBeforeInsert + 10 == documentDao.findElements(parent).length,
+                "Failed to increase count by 10");
+    }
+
+    /**
+     * Allows subclass to add permissions.
+     *
+     * @param documentDao
+     *            that will presumably offer methods to enable the operation to
+     *            be completed
+     * @param element
+     *            to the subject of the new permissions
+     * @param recipient
+     *            to receive permission (if it starts with ROLE_ it is assumed
+     *            to be a GrantedAuthority, else it is a username)
+     * @param level
+     *            based on the static final integer fields on this class
+     */
+    protected void addPermission(DocumentDao documentDao, AbstractElement element, String recipient, int level) {
+    }
 }

+ 2 - 3
samples/dms/src/main/java/sample/dms/secured/SecureDataSourcePopulator.java

@@ -13,7 +13,6 @@ import org.springframework.security.acls.model.ObjectIdentity;
 import org.springframework.security.acls.model.Permission;
 import org.springframework.security.acls.model.Sid;
 import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.util.Assert;
 
 import sample.dms.AbstractElement;
@@ -24,8 +23,8 @@ public class SecureDataSourcePopulator extends DataSourcePopulator {
 
     private MutableAclService aclService;
 
-    public SecureDataSourcePopulator(DataSource dataSource, SecureDocumentDao documentDao, PlatformTransactionManager platformTransactionManager, MutableAclService aclService) {
-        super(dataSource, documentDao, platformTransactionManager);
+    public SecureDataSourcePopulator(DataSource dataSource, SecureDocumentDao documentDao, MutableAclService aclService) {
+        super(dataSource, documentDao);
         Assert.notNull(aclService, "MutableAclService required");
         this.aclService = aclService;
     }

+ 0 - 1
samples/dms/src/main/resources/applicationContext-dms-insecure.xml

@@ -35,7 +35,6 @@
     <bean id="dataSourcePopulator" class="sample.dms.DataSourcePopulator">
         <constructor-arg ref="dataSource"/>
         <constructor-arg ref="documentDao"/>
-        <constructor-arg ref="transactionManager"/>
     </bean>
 
 </beans>

+ 18 - 15
samples/dms/src/main/resources/applicationContext-dms-secure.xml

@@ -9,7 +9,7 @@
     xmlns:s="http://www.springframework.org/schema/security"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
-                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
+                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
 
     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <property name="dataSource" ref="dataSource"/>
@@ -44,7 +44,6 @@
     <bean id="dataSourcePopulator" class="sample.dms.secured.SecureDataSourcePopulator">
         <constructor-arg ref="dataSource"/>
         <constructor-arg ref="documentDao"/>
-        <constructor-arg ref="transactionManager"/>
         <constructor-arg ref="aclService"/>
     </bean>
 
@@ -206,21 +205,25 @@
 
    <!-- ================= METHOD INVOCATION AUTHORIZATION ==================== -->
 
-   <bean id="methodSecurityAdvisor" class="org.springframework.security.access.intercept.aopalliance.MethodSecurityMetadataSourceAdvisor" autowire="constructor"/>
+   <bean id="methodSecurityAdvisor" class="org.springframework.security.access.intercept.aopalliance.MethodSecurityMetadataSourceAdvisor">
+       <constructor-arg value="methodSecurityInterceptor" />
+       <constructor-arg ref="msmds" />
+       <constructor-arg value="msmds" />
+   </bean>
 
    <bean id="methodSecurityInterceptor" class="org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor">
-      <property name="authenticationManager"><ref bean="authenticationManager"/></property>
-      <property name="accessDecisionManager"><ref local="businessAccessDecisionManager"/></property>
-      <property name="afterInvocationManager"><ref local="afterInvocationManager"/></property>
-      <property name="securityMetadataSource">
-         <value>
-            sample.dms.DocumentDao.create=ACL_ABSTRACT_ELEMENT_WRITE_PARENT
-            sample.dms.DocumentDao.delete=ACL_ABSTRACT_ELEMENT_WRITE
-            sample.dms.DocumentDao.update=ACL_ABSTRACT_ELEMENT_WRITE
-            sample.dms.DocumentDao.findElements=AFTER_ACL_COLLECTION_READ
-            sample.dms.secured.SecureDocumentDao.getUsers=ROLE_USER
-         </value>
-      </property>
+      <property name="authenticationManager" ref="authenticationManager"/>
+      <property name="accessDecisionManager" ref="businessAccessDecisionManager"/>
+      <property name="afterInvocationManager" ref="afterInvocationManager"/>
+      <property name="securityMetadataSource" ref="msmds" />
    </bean>
 
+   <s:method-security-metadata-source id="msmds">
+      <s:protect method="sample.dms.DocumentDao.create" access="ACL_ABSTRACT_ELEMENT_WRITE_PARENT" />
+      <s:protect method="sample.dms.DocumentDao.delete" access="ACL_ABSTRACT_ELEMENT_WRITE" />
+      <s:protect method="sample.dms.DocumentDao.update" access="ACL_ABSTRACT_ELEMENT_WRITE" />
+      <s:protect method="sample.dms.DocumentDao.findElements" access="AFTER_ACL_COLLECTION_READ" />
+      <s:protect method="sample.dms.secured.SecureDocumentDao.getUsers" access="ROLE_USER" />
+   </s:method-security-metadata-source>
+
 </beans>

+ 8 - 16
web/src/main/java/org/springframework/security/web/access/intercept/FilterSecurityInterceptor.java

@@ -87,6 +87,14 @@ public class FilterSecurityInterceptor extends AbstractSecurityInterceptor imple
         return this.securityMetadataSource;
     }
 
+    public SecurityMetadataSource obtainSecurityMetadataSource() {
+        return this.securityMetadataSource;
+    }
+
+    public void setSecurityMetadataSource(FilterInvocationSecurityMetadataSource newSource) {
+        this.securityMetadataSource = newSource;
+    }
+
     public Class<? extends Object> getSecureObjectClass() {
         return FilterInvocation.class;
     }
@@ -127,22 +135,6 @@ public class FilterSecurityInterceptor extends AbstractSecurityInterceptor imple
         return observeOncePerRequest;
     }
 
-    public SecurityMetadataSource obtainSecurityMetadataSource() {
-        return this.securityMetadataSource;
-    }
-
-    /**
-     * @deprecated use setSecurityMetadataSource instead
-     */
-    public void setObjectDefinitionSource(FilterInvocationSecurityMetadataSource newSource) {
-        logger.warn("The property 'objectDefinitionSource' is deprecated. Please use 'securityMetadataSource' instead");
-        this.securityMetadataSource = newSource;
-    }
-
-    public void setSecurityMetadataSource(FilterInvocationSecurityMetadataSource newSource) {
-        this.securityMetadataSource = newSource;
-    }
-
     public void setObserveOncePerRequest(boolean observeOncePerRequest) {
         this.observeOncePerRequest = observeOncePerRequest;
     }

+ 0 - 17
web/src/main/java/org/springframework/security/web/authentication/AbstractProcessingFilter.java

@@ -1,17 +0,0 @@
-package org.springframework.security.web.authentication;
-
-/**
- * Renamed class, retained for backwards compatibility.
- * <p>
- * See {@link AbstractAuthenticationProcessingFilter}.
- *
- * @author Luke Taylor
- * @deprecated Use AbstractAuthenticationProcessingFilter instead.
- */
-@Deprecated
-public abstract class AbstractProcessingFilter extends AbstractAuthenticationProcessingFilter {
-
-    protected AbstractProcessingFilter(String defaultFilterProcessesUrl) {
-        super(defaultFilterProcessesUrl);
-    }
-}

+ 0 - 14
web/src/main/java/org/springframework/security/web/authentication/AuthenticationProcessingFilter.java

@@ -1,14 +0,0 @@
-package org.springframework.security.web.authentication;
-
-/**
- * Renamed class, retained for backwards compatibility.
- * <p>
- * See {@link UsernamePasswordAuthenticationFilter}.
- *
- * @author Luke Taylor
- * @deprecated Use UsernamePasswordAuthenticationFilter instead.
- */
-
-public class AuthenticationProcessingFilter extends UsernamePasswordAuthenticationFilter {
-
-}

+ 0 - 13
web/src/main/java/org/springframework/security/web/authentication/AuthenticationProcessingFilterEntryPoint.java

@@ -1,13 +0,0 @@
-package org.springframework.security.web.authentication;
-
-/**
- * Renamed class, retained for backwards compatibility.
- * <p>
- * See {@link LoginUrlAuthenticationEntryPoint}.
- *
- * @author Luke Taylor
- * @deprecated Use LoginUrlAuthenticationEntryPoint instead.
- */
-public class AuthenticationProcessingFilterEntryPoint extends LoginUrlAuthenticationEntryPoint{
-
-}

+ 0 - 15
web/src/main/java/org/springframework/security/web/authentication/preauth/PreAuthenticatedProcessingFilterEntryPoint.java

@@ -1,15 +0,0 @@
-package org.springframework.security.web.authentication.preauth;
-
-import org.springframework.security.web.authentication.Http403ForbiddenEntryPoint;
-
-/**
- * Renamed class, retained for backwards compatibility.
- * <p>
- * See {@link Http403ForbiddenEntryPoint}.
- *
- * @author Luke Taylor
- * @deprecated Use Http403ForbiddenEntryPoint instead.
- */
-public class PreAuthenticatedProcessingFilterEntryPoint extends Http403ForbiddenEntryPoint {
-
-}

+ 0 - 34
web/src/main/java/org/springframework/security/web/context/HttpSessionSecurityContextRepository.java

@@ -222,40 +222,6 @@ public class HttpSessionSecurityContextRepository implements SecurityContextRepo
         return context;
     }
 
-    @SuppressWarnings("unchecked")
-    @Deprecated
-    /**
-     * Sets the {@code SecurityContext} implementation class.
-     *
-     * @deprecated use a custom {@code SecurityContextHolderStrategy} where the {@code createEmptyContext} method
-     *      returns the correct implementation.
-     */
-    public void setSecurityContextClass(Class contextClass) {
-        if (contextClass == null || (!SecurityContext.class.isAssignableFrom(contextClass))) {
-            throw new IllegalArgumentException("securityContextClass must implement SecurityContext "
-                    + "(typically use org.springframework.security.core.context.SecurityContextImpl; existing class is "
-                    + contextClass + ")");
-        }
-
-        this.securityContextClass = contextClass;
-        contextObject = generateNewContext();
-    }
-
-    /**
-     * Normally, the {@code SecurityContext} retrieved from the session is stored directly in the
-     * {@code SecurityContextHolder}, meaning that it is shared between concurrent threads.
-     * In this case, if one thread modifies the contents of the context, all threads will see the same
-     * change.
-     *
-     * @param cloneFromHttpSession set to true to clone the security context retrieved from the session.
-     *          Defaults to false.
-     * @deprecated Override the {@code loadContext} method and copy the created context instead.
-     */
-    @Deprecated
-    public void setCloneFromHttpSession(boolean cloneFromHttpSession) {
-        this.cloneFromHttpSession = cloneFromHttpSession;
-    }
-
     /**
      * If set to true (the default), a session will be created (if required) to store the security context if it is
      * determined that its contents are different from the default empty context value.

+ 0 - 38
web/src/test/java/org/springframework/security/web/context/HttpSessionSecurityContextRepositoryTests.java

@@ -18,20 +18,6 @@ import org.springframework.security.web.context.SaveContextOnUpdateOrErrorRespon
 public class HttpSessionSecurityContextRepositoryTests {
     private final TestingAuthenticationToken testToken = new TestingAuthenticationToken("someone", "passwd", "ROLE_A");
 
-    @Test(expected=IllegalArgumentException.class)
-    @Deprecated
-    public void detectsInvalidContextClass() throws Exception {
-        HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository();
-        repo.setSecurityContextClass(String.class);
-    }
-
-    @Deprecated
-    @Test(expected=IllegalArgumentException.class)
-    public void cannotSetNullContextClass() throws Exception {
-        HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository();
-        repo.setSecurityContextClass(null);
-    }
-
     @Test
     public void sessionIsntCreatedIfContextDoesntChange() throws Exception {
         HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository();
@@ -162,30 +148,6 @@ public class HttpSessionSecurityContextRepositoryTests {
         assertNull(request.getSession(false));
     }
 
-    @Test
-    @Deprecated
-    public void settingCloneFromContextLoadsClonedContextObject() throws Exception {
-        HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository();
-        repo.setCloneFromHttpSession(true);
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        MockContext contextBefore = new MockContext();
-        request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, contextBefore);
-        contextBefore.setAuthentication(testToken);
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        HttpRequestResponseHolder holder = new HttpRequestResponseHolder(request, response);
-        SecurityContext loadedContext = repo.loadContext(holder);
-        assertTrue(loadedContext instanceof MockContext);
-        assertFalse(loadedContext == contextBefore);
-    }
-
-    @Test
-    @Deprecated
-    public void generateNewContextWorksWithContextClass() throws Exception {
-        HttpSessionSecurityContextRepository repo = new HttpSessionSecurityContextRepository();
-        repo.setSecurityContextClass(MockContext.class);
-        assertTrue(repo.generateNewContext() instanceof MockContext);
-    }
-
     @Test
     @SuppressWarnings("deprecation")
     public void sessionDisableUrlRewritingPreventsSessionIdBeingWrittenToUrl() throws Exception {