Merge in AbstractSecurityWebApplicationInitializerTests.groovy
This commit is contained in:
parent
cf80cc88b5
commit
e5c450a14c
|
@ -0,0 +1,263 @@
|
|||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* 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.web.context;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterRegistration;
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.springframework.security.web.session.HttpSessionEventPublisher;
|
||||
import org.springframework.web.filter.DelegatingFilterProxy;
|
||||
|
||||
import spock.lang.Specification
|
||||
|
||||
/**
|
||||
* @author Rob Winch
|
||||
*
|
||||
*/
|
||||
class AbstractSecurityWebApplicationInitializerTests extends Specification {
|
||||
|
||||
def defaults() {
|
||||
setup:
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
1 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR), false, "/*");
|
||||
1 * registration.setAsyncSupported(true)
|
||||
0 * context.addListener(_)
|
||||
}
|
||||
|
||||
def "enableHttpSessionEventPublisher() = true"() {
|
||||
setup:
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected boolean enableHttpSessionEventPublisher() {
|
||||
return true;
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
1 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR), false, "/*");
|
||||
1 * registration.setAsyncSupported(true)
|
||||
1 * context.addListener(HttpSessionEventPublisher)
|
||||
}
|
||||
|
||||
def "custom getSecurityDispatcherTypes()"() {
|
||||
setup:
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected EnumSet<DispatcherType> getSecurityDispatcherTypes() {
|
||||
return EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR, DispatcherType.FORWARD);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
1 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR, DispatcherType.FORWARD), false, "/*");
|
||||
1 * registration.setAsyncSupported(true)
|
||||
0 * context.addListener(_)
|
||||
}
|
||||
|
||||
def "custom getDispatcherWebApplicationContextSuffix"() {
|
||||
setup:
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected String getDispatcherWebApplicationContextSuffix() {
|
||||
return "dispatcher"
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == "org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcher"}) >> registration
|
||||
1 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR), false, "/*");
|
||||
1 * registration.setAsyncSupported(true)
|
||||
0 * context.addListener(_)
|
||||
}
|
||||
|
||||
def "springSecurityFilterChain already registered"() {
|
||||
setup:
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> null
|
||||
IllegalStateException success = thrown()
|
||||
success.message == "Duplicate Filter registration for 'springSecurityFilterChain'. Check to ensure the Filter is only configured once."
|
||||
}
|
||||
|
||||
def "insertFilters"() {
|
||||
setup:
|
||||
Filter filter1 = Mock()
|
||||
Filter filter2 = Mock()
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
|
||||
insertFilters(context, filter1, filter2);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
3 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR), false, "/*");
|
||||
3 * registration.setAsyncSupported(true)
|
||||
0 * context.addListener(_)
|
||||
1 * context.addFilter(_, filter1) >> registration
|
||||
1 * context.addFilter(_, filter2) >> registration
|
||||
}
|
||||
|
||||
def "insertFilters already registered"() {
|
||||
setup:
|
||||
Filter filter1 = Mock()
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
|
||||
insertFilters(context, filter1);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
1 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR), false, "/*");
|
||||
1 * context.addFilter(_, filter1) >> null
|
||||
IllegalStateException success = thrown()
|
||||
success.message == "Duplicate Filter registration for 'filter'. Check to ensure the Filter is only configured once."
|
||||
}
|
||||
|
||||
def "insertFilters no filters"() {
|
||||
setup:
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
|
||||
insertFilters(context);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
IllegalArgumentException success = thrown()
|
||||
success.message == "filters cannot be null or empty"
|
||||
}
|
||||
|
||||
def "insertFilters filters with null"() {
|
||||
setup:
|
||||
Filter filter1 = Mock()
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
|
||||
insertFilters(context, filter1, null);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
2 * context.addFilter(_, _) >> registration
|
||||
IllegalArgumentException success = thrown()
|
||||
success.message == "filters cannot contain null values. Got [Mock for type 'Filter' named 'filter1', null]"
|
||||
}
|
||||
|
||||
def "appendFilters"() {
|
||||
setup:
|
||||
Filter filter1 = Mock()
|
||||
Filter filter2 = Mock()
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
|
||||
appendFilters(context,filter1, filter2);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
1 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR), false, "/*");
|
||||
2 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR), true, "/*");
|
||||
3 * registration.setAsyncSupported(true)
|
||||
0 * context.addListener(_)
|
||||
1 * context.addFilter(_, filter1) >> registration
|
||||
1 * context.addFilter(_, filter2) >> registration
|
||||
}
|
||||
|
||||
def "appendFilters already registered"() {
|
||||
setup:
|
||||
Filter filter1 = Mock()
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
|
||||
appendFilters(context, filter1);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
1 * registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR), false, "/*");
|
||||
1 * context.addFilter(_, filter1) >> null
|
||||
IllegalStateException success = thrown()
|
||||
success.message == "Duplicate Filter registration for 'filter'. Check to ensure the Filter is only configured once."
|
||||
}
|
||||
|
||||
def "appendFilters no filters"() {
|
||||
setup:
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
|
||||
appendFilters(context);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
1 * context.addFilter("springSecurityFilterChain", {DelegatingFilterProxy f -> f.targetBeanName == "springSecurityFilterChain" && f.contextAttribute == null}) >> registration
|
||||
IllegalArgumentException success = thrown()
|
||||
success.message == "filters cannot be null or empty"
|
||||
}
|
||||
|
||||
def "appendFilters filters with null"() {
|
||||
setup:
|
||||
Filter filter1 = Mock()
|
||||
ServletContext context = Mock()
|
||||
FilterRegistration.Dynamic registration = Mock()
|
||||
when:
|
||||
new AbstractSecurityWebApplicationInitializer(){
|
||||
protected void afterSpringSecurityFilterChain(ServletContext servletContext) {
|
||||
appendFilters(context, filter1, null);
|
||||
}
|
||||
}.onStartup(context)
|
||||
then:
|
||||
2 * context.addFilter(_, _) >> registration
|
||||
IllegalArgumentException success = thrown()
|
||||
success.message == "filters cannot contain null values. Got [Mock for type 'Filter' named 'filter1', null]"
|
||||
}
|
||||
|
||||
def "DEFAULT_FILTER_NAME == springSecurityFilterChain"() {
|
||||
expect:
|
||||
AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME == "springSecurityFilterChain"
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
package org.springframework.security.web.context;
|
||||
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* @author Keesun Baik
|
||||
*/
|
||||
public class AbstractSecurityWebApplicationInitializerTest {
|
||||
|
||||
@Test
|
||||
public void defaultFilterName() {
|
||||
assertEquals(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME, "springSecurityFilterChain");
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,8 @@
|
|||
apply plugin: 'groovy'
|
||||
|
||||
dependencies {
|
||||
groovy 'org.codehaus.groovy:groovy:1.8.7'
|
||||
|
||||
compile project(':spring-security-core'),
|
||||
'aopalliance:aopalliance:1.0',
|
||||
"org.springframework:spring-aop:$springVersion",
|
||||
|
@ -14,6 +18,7 @@ dependencies {
|
|||
testCompile project(':spring-security-core').sourceSets.test.output,
|
||||
'commons-codec:commons-codec:1.3',
|
||||
"org.slf4j:jcl-over-slf4j:$slf4jVersion",
|
||||
'org.spockframework:spock-core:0.6-groovy-1.8',
|
||||
"org.springframework:spring-test:$springVersion",
|
||||
powerMockDependencies
|
||||
|
||||
|
|
Loading…
Reference in New Issue