Skip to content

Commit 95c1573

Browse files
author
Dave Syer
committed
Use ErrorController.getErrorPath() to ignore the error path for security
Fixes gh-1548 again
1 parent eed58ee commit 95c1573

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.autoconfigure.jdbc;
1818

19+
import javax.annotation.PostConstruct;
1920
import javax.sql.DataSource;
2021

2122
import org.springframework.beans.factory.annotation.Autowired;
@@ -61,7 +62,10 @@ public PlatformTransactionManager transactionManager() {
6162
@Configuration
6263
@EnableTransactionManagement
6364
protected static class TransactionManagementConfiguration {
64-
65+
@PostConstruct
66+
public void init() {
67+
System.err.println("*************");
68+
}
6569
}
6670

6771
}

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
3131
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
3232
import org.springframework.boot.autoconfigure.security.SecurityProperties.Headers;
33+
import org.springframework.boot.autoconfigure.web.ErrorController;
3334
import org.springframework.boot.autoconfigure.web.ServerProperties;
3435
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3536
import org.springframework.context.annotation.Bean;
@@ -50,6 +51,7 @@
5051
import org.springframework.security.web.header.writers.HstsHeaderWriter;
5152
import org.springframework.security.web.util.matcher.AnyRequestMatcher;
5253
import org.springframework.security.web.util.matcher.RequestMatcher;
54+
import org.springframework.util.StringUtils;
5355
import org.springframework.web.servlet.support.RequestDataValueProcessor;
5456

5557
/**
@@ -86,7 +88,7 @@
8688
public class SpringBootWebSecurityConfiguration {
8789

8890
private static List<String> DEFAULT_IGNORED = Arrays.asList("/css/**", "/js/**",
89-
"/images/**", "/**/favicon.ico", "/error");
91+
"/images/**", "/**/favicon.ico");
9092

9193
@Bean
9294
@ConditionalOnMissingBean({ IgnoredPathsWebSecurityConfigurerAdapter.class })
@@ -132,6 +134,9 @@ else if (ignored.contains("none")) {
132134
private static class IgnoredPathsWebSecurityConfigurerAdapter implements
133135
WebSecurityConfigurer<WebSecurity> {
134136

137+
@Autowired(required = false)
138+
private ErrorController errorController;
139+
135140
@Autowired
136141
private SecurityProperties security;
137142

@@ -146,10 +151,21 @@ public void configure(WebSecurity builder) throws Exception {
146151
public void init(WebSecurity builder) throws Exception {
147152
IgnoredRequestConfigurer ignoring = builder.ignoring();
148153
List<String> ignored = getIgnored(this.security);
154+
if (this.errorController != null) {
155+
ignored.add(normalizePath(this.errorController.getErrorPath()));
156+
}
149157
String[] paths = this.server.getPathsArray(ignored);
150158
ignoring.antMatchers(paths);
151159
}
152160

161+
private String normalizePath(String errorPath) {
162+
String result = StringUtils.cleanPath(errorPath);
163+
if (!result.startsWith("/")) {
164+
result = "/" + result;
165+
}
166+
return result;
167+
}
168+
153169
}
154170

155171
// Pull in @EnableWebMvcSecurity if Spring MVC is available and no-one defined a

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void testWebConfiguration() throws Exception {
7171
// 5 for static resources and one for the rest
7272
List<SecurityFilterChain> filterChains = this.context.getBean(
7373
FilterChainProxy.class).getFilterChains();
74-
assertEquals(6, filterChains.size());
74+
assertEquals(5, filterChains.size());
7575
}
7676

7777
@Test

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SpringBootWebSecurityConfigurationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class SpringBootWebSecurityConfigurationTests {
3030
@Test
3131
public void testDefaultIgnores() {
3232
assertTrue(SpringBootWebSecurityConfiguration
33-
.getIgnored(new SecurityProperties()).contains("/error"));
33+
.getIgnored(new SecurityProperties()).contains("/css/**"));
3434
}
3535

3636
}

0 commit comments

Comments
 (0)