Skip to content

Commit e059d0c

Browse files
author
Dave Syer
committed
Re-order security auto configuration so the fallback can be applied
The management security autoconfiguration wanted to come last in the chain but that won't suit the fallback that was already in place for gh-568. This change re-orders the autoconfig so that @EnableWebSecurity is still added if the user sets security.basic.enabled=false and includes the actuator endpoints. Fixes gh-568
1 parent 60ad7cd commit e059d0c

File tree

5 files changed

+52
-24
lines changed

5 files changed

+52
-24
lines changed

spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfiguration.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@
2929
import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
3030
import org.springframework.boot.actuate.web.ErrorController;
3131
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
32+
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
3233
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3334
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3435
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
3536
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3637
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
3738
import org.springframework.boot.autoconfigure.security.AuthenticationManagerConfiguration;
39+
import org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration;
3840
import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
3941
import org.springframework.boot.autoconfigure.security.SecurityPrequisite;
4042
import org.springframework.boot.autoconfigure.security.SecurityProperties;
@@ -70,6 +72,7 @@
7072
@Configuration
7173
@ConditionalOnClass({ EnableWebSecurity.class })
7274
@AutoConfigureAfter(SecurityAutoConfiguration.class)
75+
@AutoConfigureBefore(FallbackWebSecurityAutoConfiguration.class)
7376
@EnableConfigurationProperties
7477
public class ManagementSecurityAutoConfiguration {
7578

spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfigurationTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.After;
2020
import org.junit.Test;
2121
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
22+
import org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration;
2223
import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
2324
import org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration;
2425
import org.springframework.boot.test.EnvironmentTestUtils;
@@ -133,6 +134,7 @@ public void testDisableBasicAuthOnApplicationPaths() throws Exception {
133134
ManagementServerPropertiesAutoConfiguration.class,
134135
SecurityAutoConfiguration.class,
135136
ManagementSecurityAutoConfiguration.class,
137+
FallbackWebSecurityAutoConfiguration.class,
136138
PropertyPlaceholderAutoConfiguration.class);
137139
EnvironmentTestUtils.addEnvironment(this.context, "security.basic.enabled:false");
138140
this.context.refresh();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright 2012-2013 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.autoconfigure.security;
18+
19+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
20+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
21+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
22+
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
23+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
25+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
26+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration;
27+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
28+
29+
/**
30+
* If the user explicitly disables the basic security features and forgets to
31+
* <code>@EnableWebSecurity</code>, and yet still wants a bean of type
32+
* WebSecurityConfigurerAdapter, he is trying to use a custom security setup. The app
33+
* would fail in a confusing way without this shim configuration, which just helpfully
34+
* defines an empty <code>@EnableWebSecurity</code>.
35+
*
36+
* @author Dave Syer
37+
*/
38+
@ConditionalOnExpression("!${security.basic.enabled:true}")
39+
@ConditionalOnBean(WebSecurityConfigurerAdapter.class)
40+
@ConditionalOnClass(EnableWebSecurity.class)
41+
@ConditionalOnMissingBean(WebSecurityConfiguration.class)
42+
@ConditionalOnWebApplication
43+
@AutoConfigureAfter(SecurityAutoConfiguration.class)
44+
@EnableWebSecurity
45+
public class FallbackWebSecurityAutoConfiguration {
46+
}

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfiguration.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,13 @@
1717
package org.springframework.boot.autoconfigure.security;
1818

1919
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
20-
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2120
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
22-
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
2321
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
24-
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
2522
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2623
import org.springframework.context.annotation.Bean;
2724
import org.springframework.context.annotation.Configuration;
2825
import org.springframework.context.annotation.Import;
2926
import org.springframework.security.authentication.AuthenticationManager;
30-
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
31-
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration;
3227
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
3328

3429
/**
@@ -57,23 +52,4 @@ public SecurityProperties securityProperties() {
5752
return new SecurityProperties();
5853
}
5954

60-
/**
61-
* If the user explicitly disables the basic security features and forgets to
62-
* <code>@EnableWebSecurity</code>, and yet still wants a bean of type
63-
* WebSecurityConfigurerAdapter, he is trying to use a custom security setup. The app
64-
* would fail in a confusing way without this shim configuration, which just helpfully
65-
* defines an empty <code>@EnableWebSecurity</code>.
66-
*
67-
* @author Dave Syer
68-
*/
69-
@ConditionalOnExpression("!${security.basic.enabled:true}")
70-
@ConditionalOnBean(WebSecurityConfigurerAdapter.class)
71-
@ConditionalOnClass(EnableWebSecurity.class)
72-
@ConditionalOnMissingBean(WebSecurityConfiguration.class)
73-
@ConditionalOnWebApplication
74-
@EnableWebSecurity
75-
protected static class EmptyWebSecurityConfiguration {
76-
77-
}
78-
7955
}

spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
2222
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
2323
org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
2424
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
25+
org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
2526
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
2627
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
2728
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\

0 commit comments

Comments
 (0)