Skip to content

Commit 0e53e9a

Browse files
committed
Merge pull request 'Implement liveness and readiness probes' (#3) from feature/22879 into develop
2 parents 2e6bb0c + 677a749 commit 0e53e9a

14 files changed

Lines changed: 92 additions & 33 deletions

pom.xml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<parent>
1313
<groupId>org.springframework.boot</groupId>
1414
<artifactId>spring-boot-starter-parent</artifactId>
15-
<version>2.0.0.RELEASE</version>
15+
<version>2.3.3.RELEASE</version>
1616
<relativePath />
1717
</parent>
1818

@@ -45,6 +45,11 @@
4545
<id>alfresco</id>
4646
<url>https://artifacts.alfresco.com/nexus/content/repositories/public/</url>
4747
</repository>
48+
<repository>
49+
<!-- Currently used only for the spring-social-github 1.0.0.M4 dependency -->
50+
<id>spring</id>
51+
<url>https://repo.spring.io/plugins-release/</url>
52+
</repository>
4853
</repositories>
4954

5055
<dependencies>
@@ -98,7 +103,7 @@
98103
<dependency>
99104
<groupId>org.springframework.security.oauth.boot</groupId>
100105
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
101-
<version>2.1.2.RELEASE</version>
106+
<version>2.3.3.RELEASE</version>
102107
</dependency>
103108
<dependency>
104109
<groupId>org.springframework.security</groupId>
@@ -123,10 +128,13 @@
123128
<artifactId>spring-security-test</artifactId>
124129
<scope>test</scope>
125130
</dependency>
131+
<dependency>
132+
<groupId>org.springframework.boot</groupId>
133+
<artifactId>spring-boot-starter-actuator</artifactId>
134+
</dependency>
126135

127136
<!-- Spring social security components -->
128-
<!-- Note: also includes an embedded datasource (H2) to remember social
129-
logins -->
137+
<!-- Note: also includes an embedded datasource (H2) to remember social logins -->
130138
<dependency>
131139
<groupId>org.springframework.boot</groupId>
132140
<artifactId>spring-boot-starter-jdbc</artifactId>
@@ -223,6 +231,7 @@
223231
<dependency>
224232
<groupId>org.thymeleaf.extras</groupId>
225233
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
234+
<version>3.0.2.RELEASE</version>
226235
</dependency>
227236
<dependency>
228237
<groupId>org.webjars</groupId>
@@ -290,6 +299,7 @@
290299

291300
<executions>
292301
<execution>
302+
<id>repackage</id>
293303
<goals>
294304
<goal>repackage</goal>
295305
</goals>

src/main/java/eu/openanalytics/containerproxy/ContainerProxyApplication.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@
3030
import org.springframework.boot.web.servlet.FilterRegistrationBean;
3131
import org.springframework.context.annotation.Bean;
3232
import org.springframework.context.annotation.ComponentScan;
33+
import org.springframework.context.event.ContextRefreshedEvent;
34+
import org.springframework.context.event.EventListener;
3335
import org.springframework.core.env.Environment;
36+
import org.springframework.web.filter.FormContentFilter;
3437
import org.springframework.web.filter.HiddenHttpMethodFilter;
35-
import org.springframework.web.filter.HttpPutFormContentFilter;
3638

3739
import com.fasterxml.jackson.datatype.jsr353.JSR353Module;
3840

@@ -41,6 +43,7 @@
4143
import java.net.UnknownHostException;
4244
import java.nio.file.Files;
4345
import java.nio.file.Paths;
46+
import java.util.Properties;
4447

4548
@SpringBootApplication
4649
@ComponentScan("eu.openanalytics")
@@ -59,7 +62,9 @@ public static void main(String[] args) {
5962

6063
boolean hasExternalConfig = Files.exists(Paths.get(CONFIG_FILENAME));
6164
if (!hasExternalConfig) app.setAdditionalProfiles(CONFIG_DEMO_PROFILE);
62-
65+
66+
setDefaultProperties(app);
67+
6368
try {
6469
app.setLogStartupInfo(false);
6570
app.run(args);
@@ -75,6 +80,7 @@ public static void main(String[] args) {
7580
public UndertowServletWebServerFactory servletContainer() {
7681
UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();
7782
factory.addDeploymentInfoCustomizers(info -> {
83+
info.setPreservePathOnForward(false); // required for the /api/route/{id}/ endpoint to work properly
7884
if (Boolean.valueOf(environment.getProperty("logging.requestdump", "false"))) {
7985
info.addOuterHandlerChainWrapper(defaultHandler -> Handlers.requestDump(defaultHandler));
8086
}
@@ -98,15 +104,8 @@ public UndertowServletWebServerFactory servletContainer() {
98104
// Disable specific Spring filters that parse the request body, preventing it from being proxied.
99105

100106
@Bean
101-
public FilterRegistrationBean<HiddenHttpMethodFilter> registration1(HiddenHttpMethodFilter filter) {
102-
FilterRegistrationBean<HiddenHttpMethodFilter> registration = new FilterRegistrationBean<>(filter);
103-
registration.setEnabled(false);
104-
return registration;
105-
}
106-
107-
@Bean
108-
public FilterRegistrationBean<HttpPutFormContentFilter> registration2(HttpPutFormContentFilter filter) {
109-
FilterRegistrationBean<HttpPutFormContentFilter> registration = new FilterRegistrationBean<>(filter);
107+
public FilterRegistrationBean<FormContentFilter> registration2(FormContentFilter filter) {
108+
FilterRegistrationBean<FormContentFilter> registration = new FilterRegistrationBean<>(filter);
110109
registration.setEnabled(false);
111110
return registration;
112111
}
@@ -119,4 +118,12 @@ public FilterRegistrationBean<HttpPutFormContentFilter> registration2(HttpPutFor
119118
public JSR353Module jsr353Module() {
120119
return new JSR353Module();
121120
}
121+
122+
private static void setDefaultProperties(SpringApplication app ) {
123+
Properties properties = new Properties();
124+
properties.put("management.health.ldap.enabled", false);
125+
properties.put("management.endpoint.health.probes.enabled", true);
126+
app.setDefaultProperties(properties);
127+
}
128+
122129
}

src/main/java/eu/openanalytics/containerproxy/auth/IAuthenticationBackend.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
2626
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
27+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
28+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
2729

2830
import eu.openanalytics.containerproxy.model.spec.ContainerSpec;
2931

@@ -46,7 +48,7 @@ public interface IAuthenticationBackend {
4648
/**
4749
* Perform customization on the http level, such as filters and login forms.
4850
*/
49-
public void configureHttpSecurity(HttpSecurity http) throws Exception;
51+
public void configureHttpSecurity(HttpSecurity http, AuthorizedUrl anyRequestConfigurer) throws Exception;
5052

5153
/**
5254
* Perform customization on the authentication manager level, such as authentication

src/main/java/eu/openanalytics/containerproxy/auth/impl/KerberosAuthenticationBackend.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.springframework.security.authentication.AuthenticationManager;
3333
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
3434
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
35+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
3536
import org.springframework.security.core.Authentication;
3637
import org.springframework.security.core.AuthenticationException;
3738
import org.springframework.security.core.context.SecurityContextHolder;
@@ -45,6 +46,7 @@
4546
import org.springframework.security.kerberos.web.authentication.SpnegoAuthenticationProcessingFilter;
4647
import org.springframework.security.kerberos.web.authentication.SpnegoEntryPoint;
4748
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
49+
import org.springframework.context.annotation.Lazy;
4850

4951
import eu.openanalytics.containerproxy.auth.IAuthenticationBackend;
5052
import eu.openanalytics.containerproxy.auth.impl.kerberos.KRBClientCacheRegistry;
@@ -62,6 +64,7 @@ public class KerberosAuthenticationBackend implements IAuthenticationBackend {
6264
@Inject
6365
Environment environment;
6466

67+
@Lazy
6568
@Inject
6669
AuthenticationManager authenticationManager;
6770

@@ -79,7 +82,7 @@ public boolean hasAuthorization() {
7982
}
8083

8184
@Override
82-
public void configureHttpSecurity(HttpSecurity http) throws Exception {
85+
public void configureHttpSecurity(HttpSecurity http, AuthorizedUrl anyRequestConfigurer) throws Exception {
8386

8487
SpnegoAuthenticationProcessingFilter filter = new SpnegoAuthenticationProcessingFilter();
8588
filter.setAuthenticationManager(authenticationManager);

src/main/java/eu/openanalytics/containerproxy/auth/impl/KeycloakAuthenticationBackend.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.springframework.security.authentication.AuthenticationManager;
5757
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
5858
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
59+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
5960
import org.springframework.security.core.Authentication;
6061
import org.springframework.security.core.AuthenticationException;
6162
import org.springframework.security.core.GrantedAuthority;
@@ -98,7 +99,7 @@ public boolean hasAuthorization() {
9899
}
99100

100101
@Override
101-
public void configureHttpSecurity(HttpSecurity http) throws Exception {
102+
public void configureHttpSecurity(HttpSecurity http, AuthorizedUrl anyRequestConfigurer) throws Exception {
102103
http.formLogin().disable();
103104

104105
http

src/main/java/eu/openanalytics/containerproxy/auth/impl/LDAPAuthenticationBackend.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
4040
import org.springframework.security.config.annotation.authentication.configurers.ldap.LdapAuthenticationProviderConfigurer;
4141
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
42+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
4243
import org.springframework.security.core.GrantedAuthority;
4344
import org.springframework.security.core.authority.SimpleGrantedAuthority;
4445
import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
@@ -67,7 +68,7 @@ public boolean hasAuthorization() {
6768
}
6869

6970
@Override
70-
public void configureHttpSecurity(HttpSecurity http) throws Exception {
71+
public void configureHttpSecurity(HttpSecurity http, AuthorizedUrl anyRequestConfigurer) throws Exception {
7172
// Nothing to do.
7273
}
7374

src/main/java/eu/openanalytics/containerproxy/auth/impl/NoAuthenticationBackend.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
2424
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
25+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
2526

2627
import eu.openanalytics.containerproxy.auth.IAuthenticationBackend;
2728

@@ -43,7 +44,7 @@ public boolean hasAuthorization() {
4344
}
4445

4546
@Override
46-
public void configureHttpSecurity(HttpSecurity http) throws Exception {
47+
public void configureHttpSecurity(HttpSecurity http, AuthorizedUrl anyRequestConfigurer) throws Exception {
4748
// Nothing to do.
4849
}
4950

src/main/java/eu/openanalytics/containerproxy/auth/impl/OpenIDAuthenticationBackend.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.springframework.core.env.Environment;
3535
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
3636
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
37+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
3738
import org.springframework.security.core.Authentication;
3839
import org.springframework.security.core.GrantedAuthority;
3940
import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -87,13 +88,13 @@ public boolean hasAuthorization() {
8788
}
8889

8990
@Override
90-
public void configureHttpSecurity(HttpSecurity http) throws Exception {
91+
public void configureHttpSecurity(HttpSecurity http, AuthorizedUrl anyRequestConfigurer) throws Exception {
9192
ClientRegistrationRepository clientRegistrationRepo = createClientRepo();
9293
authorizedClientService = new InMemoryOAuth2AuthorizedClientService(clientRegistrationRepo);
9394

95+
anyRequestConfigurer.authenticated();
96+
9497
http
95-
.authorizeRequests().anyRequest().authenticated()
96-
.and()
9798
.oauth2Login()
9899
.loginPage("/login")
99100
.clientRegistrationRepository(clientRegistrationRepo)

src/main/java/eu/openanalytics/containerproxy/auth/impl/SAMLAuthenticationBackend.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.springframework.beans.factory.annotation.Autowired;
2424
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
2525
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
26+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
2627
import org.springframework.security.saml.SAMLAuthenticationProvider;
2728
import org.springframework.security.saml.SAMLEntryPoint;
2829
import org.springframework.security.saml.metadata.MetadataGeneratorFilter;
@@ -61,7 +62,7 @@ public boolean hasAuthorization() {
6162
}
6263

6364
@Override
64-
public void configureHttpSecurity(HttpSecurity http) throws Exception {
65+
public void configureHttpSecurity(HttpSecurity http, AuthorizedUrl anyRequestConfigurer) throws Exception {
6566
http
6667
.exceptionHandling().authenticationEntryPoint(samlEntryPoint)
6768
.and()

src/main/java/eu/openanalytics/containerproxy/auth/impl/SimpleAuthenticationBackend.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
2929
import org.springframework.security.config.annotation.authentication.configurers.provisioning.InMemoryUserDetailsManagerConfigurer;
3030
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
31+
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
3132

3233
import eu.openanalytics.containerproxy.auth.IAuthenticationBackend;
3334

@@ -53,7 +54,7 @@ public boolean hasAuthorization() {
5354
}
5455

5556
@Override
56-
public void configureHttpSecurity(HttpSecurity http) throws Exception {
57+
public void configureHttpSecurity(HttpSecurity http, AuthorizedUrl anyRequestConfigurer) throws Exception {
5758
// Nothing to do.
5859
}
5960

0 commit comments

Comments
 (0)