SEC-1118: Added run-as-manager-ref attribute to global-method-security element. Also updated schema to use xsd:token in place of xsd:string where appropriate.

This commit is contained in:
Luke Taylor
2009-05-01 05:16:19 +00:00
parent 459a3095c4
commit 8c94e39150
7 changed files with 233 additions and 169 deletions

View File

@@ -1,16 +1,19 @@
package org.springframework.security.config;
import static org.junit.Assert.*;
import static org.springframework.security.config.GlobalMethodSecurityBeanDefinitionParser.*;
import static org.springframework.security.config.ConfigTestUtils.AUTH_PROVIDER_XML;
import static org.springframework.security.config.GlobalMethodSecurityBeanDefinitionParser.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Test;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.parsing.BeanDefinitionParsingException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.StaticApplicationContext;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.access.annotation.BusinessService;
import org.springframework.security.access.annotation.Jsr250MethodSecurityMetadataSource;
@@ -20,6 +23,7 @@ import org.springframework.security.access.expression.method.ExpressionAnnotatio
import org.springframework.security.access.expression.method.MethodExpressionAfterInvocationProvider;
import org.springframework.security.access.expression.method.MethodExpressionVoter;
import org.springframework.security.access.intercept.AfterInvocationProviderManager;
import org.springframework.security.access.intercept.RunAsManagerImpl;
import org.springframework.security.access.vote.AffirmativeBased;
import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
import org.springframework.security.authentication.TestingAuthenticationToken;
@@ -260,9 +264,26 @@ public class GlobalMethodSecurityBeanDefinitionParserTests {
assertEquals("bob", result[0]);
}
@Test
public void runAsManagerIsSetCorrectly() throws Exception {
StaticApplicationContext parent = new StaticApplicationContext();
MutablePropertyValues props = new MutablePropertyValues();
props.addPropertyValue("key", "blah");
parent.registerSingleton("runAsMgr", RunAsManagerImpl.class, props);
parent.refresh();
setContext("<global-method-security run-as-manager-ref='runAsMgr'/>" + AUTH_PROVIDER_XML, parent);
RunAsManagerImpl ram = (RunAsManagerImpl) appContext.getBean("runAsMgr");
assertSame(ram, FieldUtils.getFieldValue(appContext.getBean(GlobalMethodSecurityBeanDefinitionParser.SECURITY_INTERCEPTOR_ID), "runAsManager"));
}
private void setContext(String context) {
appContext = new InMemoryXmlApplicationContext(context);
}
private void setContext(String context, ApplicationContext parent) {
appContext = new InMemoryXmlApplicationContext(context, parent);
}
}

View File

@@ -1,5 +1,6 @@
package org.springframework.security.config.util;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.security.util.InMemoryResource;
@@ -22,12 +23,18 @@ public class InMemoryXmlApplicationContext extends AbstractXmlApplicationContext
Resource inMemoryXml;
public InMemoryXmlApplicationContext(String xml) {
this(xml, true);
this(xml, true, null);
}
public InMemoryXmlApplicationContext(String xml, boolean addBeansTags) {
public InMemoryXmlApplicationContext(String xml, ApplicationContext parent) {
this(xml, true, parent);
}
public InMemoryXmlApplicationContext(String xml, boolean addBeansTags, ApplicationContext parent) {
String fullXml = addBeansTags ? BEANS_OPENING + xml + BEANS_CLOSE : xml;
inMemoryXml = new InMemoryResource(fullXml);
setParent(parent);
refresh();
}