Skip to content

Commit 995700e

Browse files
authored
Add Spring Security to the all apps (#253)
* Update Spring Boot to 3.4.4 * Add Spring Security. Add test to increase coverage.
1 parent 787a9cd commit 995700e

File tree

12 files changed

+151
-26
lines changed

12 files changed

+151
-26
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description = "Experiments with Java"
99

1010
allprojects {
1111
group = "io.github.mfvanek"
12-
version = "0.3.2"
12+
version = "0.3.3"
1313

1414
repositories {
1515
mavenLocal()

buildSrc/src/main/kotlin/sb-ot-demo.java-conventions.gradle.kts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,28 +119,28 @@ tasks {
119119
limit {
120120
counter = "METHOD"
121121
value = "MISSEDCOUNT"
122-
maximum = "3.0".toBigDecimal()
122+
maximum = "2.0".toBigDecimal()
123123
}
124124
}
125125
rule {
126126
limit {
127127
counter = "LINE"
128128
value = "MISSEDCOUNT"
129-
maximum = "10.0".toBigDecimal()
129+
maximum = "7.0".toBigDecimal()
130130
}
131131
}
132132
rule {
133133
limit {
134134
counter = "INSTRUCTION"
135135
value = "COVEREDRATIO"
136-
minimum = "0.90".toBigDecimal()
136+
minimum = "0.93".toBigDecimal()
137137
}
138138
}
139139
rule {
140140
limit {
141141
counter = "BRANCH"
142142
value = "COVEREDRATIO"
143-
minimum = "0.65".toBigDecimal()
143+
minimum = "0.66".toBigDecimal()
144144
}
145145
}
146146
}

settings.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ include("db-migrations")
77
dependencyResolutionManagement {
88
versionCatalogs {
99
create("libs") {
10-
val springBoot3Version = version("spring-boot-v3", "3.3.9")
10+
val springBoot3Version = version("spring-boot-v3", "3.4.4")
1111
plugin("spring-boot-v3", "org.springframework.boot")
1212
.versionRef(springBoot3Version)
1313
library("spring-boot-v3-dependencies", "org.springframework.boot", "spring-boot-dependencies")

spring-boot-2-demo-app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ dependencies {
1818
implementation("org.springframework.boot:spring-boot-starter-web")
1919
implementation("org.springframework.boot:spring-boot-starter-webflux")
2020
implementation("org.springframework.boot:spring-boot-starter-actuator")
21+
implementation("org.springframework.boot:spring-boot-starter-security")
2122
implementation("io.micrometer:micrometer-registry-prometheus")
2223
implementation("org.springdoc:springdoc-openapi-ui")
2324

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (c) 2020-2025. Ivan Vakhrushev and others.
3+
* https://github.com/mfvanek/spring-boot-open-telemetry-demo
4+
*
5+
* Licensed under the Apache License 2.0
6+
*/
7+
8+
package io.github.mfvanek.spring.boot2.test.config;
9+
10+
import lombok.SneakyThrows;
11+
import org.springframework.context.annotation.Bean;
12+
import org.springframework.context.annotation.Configuration;
13+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
14+
import org.springframework.security.web.SecurityFilterChain;
15+
16+
@Configuration(proxyBeanMethods = false)
17+
public class SecurityConfig {
18+
19+
@Bean
20+
@SneakyThrows
21+
public SecurityFilterChain securityFilterChain(HttpSecurity http) {
22+
http.authorizeHttpRequests(authorize ->
23+
authorize.anyRequest().permitAll());
24+
return http.build();
25+
}
26+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright (c) 2020-2025. Ivan Vakhrushev and others.
3+
* https://github.com/mfvanek/spring-boot-open-telemetry-demo
4+
*
5+
* Licensed under the Apache License 2.0
6+
*/
7+
8+
package io.github.mfvanek.spring.boot2.test.controllers;
9+
10+
import io.github.mfvanek.spring.boot2.test.support.TestBase;
11+
import org.junit.jupiter.api.Test;
12+
13+
import static io.github.mfvanek.spring.boot2.test.filters.TraceIdInResponseServletFilter.TRACE_ID_HEADER_NAME;
14+
import static org.assertj.core.api.Assertions.assertThat;
15+
16+
class RedirectControllerTest extends TestBase {
17+
18+
@Test
19+
void redirectShouldWork() {
20+
final Object result = webTestClient.get()
21+
.uri("/redirect")
22+
.exchange()
23+
.expectStatus().isEqualTo(303)
24+
.expectHeader().exists(TRACE_ID_HEADER_NAME)
25+
.expectHeader().location("https://www.google.com")
26+
.expectBody(Object.class)
27+
.returnResult()
28+
.getResponseBody();
29+
assertThat(result)
30+
.isNull();
31+
}
32+
}

spring-boot-3-demo-app/build.gradle.kts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ plugins {
88

99
dependencies {
1010
implementation(platform(project(":common-internal-bom")))
11-
implementation(platform("org.springdoc:springdoc-openapi:2.6.0"))
11+
implementation(platform("org.springdoc:springdoc-openapi:2.8.6"))
1212
implementation(platform(libs.spring.boot.v3.dependencies))
13-
implementation(platform("org.springframework.cloud:spring-cloud-dependencies:2023.0.5"))
13+
implementation(platform("org.springframework.cloud:spring-cloud-dependencies:2024.0.1"))
1414

1515
implementation("org.springframework.boot:spring-boot-starter-web")
1616
implementation("org.springframework.boot:spring-boot-starter-webflux")
1717
implementation("org.springframework.boot:spring-boot-starter-actuator")
18+
implementation("org.springframework.boot:spring-boot-starter-security")
1819
implementation("io.micrometer:micrometer-registry-prometheus")
1920
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui")
2021

@@ -29,7 +30,7 @@ dependencies {
2930
implementation(project(":db-migrations"))
3031
implementation("org.liquibase:liquibase-core")
3132
implementation("com.github.blagerweij:liquibase-sessionlock")
32-
implementation("net.ttddyy.observation:datasource-micrometer-spring-boot:1.0.6")
33+
implementation("net.ttddyy.observation:datasource-micrometer-spring-boot:1.1.0")
3334
implementation("net.logstash.logback:logstash-logback-encoder:8.0")
3435

3536
testImplementation("org.springframework.boot:spring-boot-starter-test")

spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/config/OpenTelemetryConfig.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
1111
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder;
12-
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpAutoConfiguration;
13-
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpProperties;
12+
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingAutoConfiguration;
13+
import org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingProperties;
1414
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
1515
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1616
import org.springframework.context.annotation.Bean;
@@ -19,17 +19,17 @@
1919
import java.util.Locale;
2020
import javax.annotation.Nonnull;
2121

22-
@AutoConfigureBefore(OtlpAutoConfiguration.class)
22+
@AutoConfigureBefore(OtlpTracingAutoConfiguration.class)
2323
@Configuration(proxyBeanMethods = false)
2424
class OpenTelemetryConfig {
2525

26-
// Waiting for https://github.com/spring-projects/spring-boot/pull/41213
2726
@Bean
2827
@ConditionalOnMissingBean(OtlpGrpcSpanExporter.class)
29-
OtlpGrpcSpanExporter otelJaegerGrpcSpanExporter(@Nonnull final OtlpProperties otlpProperties) {
28+
OtlpGrpcSpanExporter otelJaegerGrpcSpanExporter(@Nonnull final OtlpTracingProperties otlpProperties) {
3029
final OtlpGrpcSpanExporterBuilder builder = OtlpGrpcSpanExporter.builder()
3130
.setEndpoint(otlpProperties.getEndpoint())
3231
.setTimeout(otlpProperties.getTimeout())
32+
.setConnectTimeout(otlpProperties.getConnectTimeout())
3333
.setCompression(String.valueOf(otlpProperties.getCompression()).toLowerCase(Locale.ROOT));
3434
otlpProperties.getHeaders().forEach(builder::addHeader);
3535
return builder.build();
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (c) 2020-2025. Ivan Vakhrushev and others.
3+
* https://github.com/mfvanek/spring-boot-open-telemetry-demo
4+
*
5+
* Licensed under the Apache License 2.0
6+
*/
7+
8+
package io.github.mfvanek.spring.boot3.test.config;
9+
10+
import lombok.SneakyThrows;
11+
import org.springframework.context.annotation.Bean;
12+
import org.springframework.context.annotation.Configuration;
13+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
14+
import org.springframework.security.web.SecurityFilterChain;
15+
16+
@Configuration(proxyBeanMethods = false)
17+
public class SecurityConfig {
18+
19+
@Bean
20+
@SneakyThrows
21+
public SecurityFilterChain securityFilterChain(HttpSecurity http) {
22+
http.authorizeHttpRequests(authorize ->
23+
authorize.anyRequest().permitAll());
24+
return http.build();
25+
}
26+
}

spring-boot-3-demo-app/src/main/resources/application.yml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,31 +59,32 @@ management:
5959
server:
6060
port: 8085
6161
endpoints:
62-
enabled-by-default: false
6362
web:
6463
exposure.include: '*'
6564
cors:
6665
allowed-methods: '*'
6766
allowed-origins: '*'
6867
allowed-headers: '*'
68+
access:
69+
default: read_only
6970
endpoint:
7071
health:
71-
enabled: true
7272
probes.enabled: true
7373
group:
7474
readiness:
7575
include: readinessState, db
7676
additional-path: server:/readyz # In order to collect probes from application main port
77+
access: read_only
7778
prometheus:
78-
enabled: true
79+
access: read_only
7980
liquibase:
80-
enabled: true
81+
access: read_only
8182
info:
82-
enabled: true
83+
access: read_only
8384
threaddump:
84-
enabled: true
85+
access: read_only
8586
heapdump:
86-
enabled: true
87+
access: read_only
8788
metrics:
8889
distribution:
8990
percentiles-histogram:
@@ -111,6 +112,10 @@ management:
111112
- w3c
112113
sampling:
113114
probability: 1.0
115+
observations:
116+
enable:
117+
spring:
118+
security: false
114119
otlp:
115120
tracing:
116121
endpoint: http://localhost:4317

0 commit comments

Comments
 (0)