Skip to content

Commit c78cd22

Browse files
committed
Fix #24466: allow configuring CORS
1 parent 747ad19 commit c78cd22

2 files changed

Lines changed: 39 additions & 4 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/security/WebSecurityConfig.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.springframework.security.web.csrf.MissingCsrfTokenException;
4646
import org.springframework.security.web.header.writers.StaticHeadersWriter;
4747
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
48+
import org.springframework.web.servlet.config.annotation.CorsRegistry;
4849
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
4950

5051
import javax.inject.Inject;
@@ -54,6 +55,8 @@
5455
import java.io.IOException;
5556
import java.util.List;
5657

58+
import static eu.openanalytics.containerproxy.ui.TemplateResolverConfig.PROP_CORS_ALLOWED_ORIGINS;
59+
5760
@Configuration
5861
@EnableWebSecurity
5962
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@@ -107,6 +110,11 @@ private void checkForIncorrectConfiguration(HttpServletRequest request) {
107110

108111
@Override
109112
protected void configure(HttpSecurity http) throws Exception {
113+
if (environment.getProperty(PROP_CORS_ALLOWED_ORIGINS + "[0]") != null) {
114+
// enable cors
115+
http.cors();
116+
}
117+
110118
// App Recovery Filter
111119
http.addFilterAfter(appRecoveryFilter, BasicAuthenticationFilter.class);
112120

src/main/java/eu/openanalytics/containerproxy/ui/TemplateResolverConfig.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,33 @@
2020
*/
2121
package eu.openanalytics.containerproxy.ui;
2222

23-
import javax.inject.Inject;
24-
2523
import org.springframework.context.annotation.Bean;
2624
import org.springframework.context.annotation.Configuration;
2725
import org.springframework.core.env.Environment;
26+
import org.springframework.web.servlet.config.annotation.CorsRegistry;
2827
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
2928
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
3029
import org.thymeleaf.templateresolver.FileTemplateResolver;
3130

31+
import javax.annotation.Nonnull;
32+
import javax.inject.Inject;
33+
import java.util.ArrayList;
34+
import java.util.List;
35+
3236
@Configuration
3337
public class TemplateResolverConfig implements WebMvcConfigurer {
3438

39+
private static final String PROP_TEMPLATE_PATH = "proxy.template-path";
40+
41+
public static final String PROP_CORS_ALLOWED_ORIGINS = "proxy.api-security.cors-allowed-origins";
42+
3543
@Inject
3644
private Environment environment;
3745

3846
@Override
3947
public void addResourceHandlers(ResourceHandlerRegistry registry) {
4048
registry.addResourceHandler("/assets/**")
41-
.addResourceLocations("file:" + environment.getProperty("proxy.template-path") + "/assets/");
49+
.addResourceLocations("file:" + environment.getProperty(PROP_TEMPLATE_PATH) + "/assets/");
4250
}
4351

4452
@Bean
@@ -52,4 +60,23 @@ public FileTemplateResolver templateResolver() {
5260
resolver.setOrder(1);
5361
return resolver;
5462
}
55-
}
63+
64+
@Override
65+
public void addCorsMappings(@Nonnull CorsRegistry registry) {
66+
List<String> origins = new ArrayList<>();
67+
int i = 0;
68+
String origin = environment.getProperty(String.format(PROP_CORS_ALLOWED_ORIGINS + "[%d]", i));
69+
while (origin != null) {
70+
origins.add(origin);
71+
i++;
72+
origin = environment.getProperty(String.format(PROP_CORS_ALLOWED_ORIGINS + "[%d]", i));
73+
}
74+
75+
if (origins.size() > 0) {
76+
registry.addMapping("/**")
77+
.allowCredentials(true)
78+
.allowedOrigins(origins.toArray(new String[0]));
79+
}
80+
}
81+
82+
}

0 commit comments

Comments
 (0)