Skip to content

Commit bf32b10

Browse files
2 parents e7431a3 + 5353d49 commit bf32b10

File tree

38 files changed

+112
-60
lines changed

38 files changed

+112
-60
lines changed

.github/workflows/continuous-integration-workflow.yml

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,40 +63,24 @@ jobs:
6363
samples_branch=$(cat gradle.properties | grep "samplesBranch=" | awk -F'=' '{print $2}')
6464
./gradlew publishMavenJavaPublicationToLocalRepository
6565
./gradlew cloneRepository -PrepositoryName="spring-projects/spring-security-samples" -Pref="$samples_branch" -PcloneOutputDirectory="$SAMPLES_DIR"
66-
./gradlew --refresh-dependencies --project-dir "$SAMPLES_DIR" --init-script spring-security-ci.gradle -PlocalRepositoryPath="$LOCAL_REPOSITORY_PATH" -PspringSecurityVersion="$version" test integrationTest
67-
check-tangles:
68-
name: Check for Package Tangles
69-
runs-on: ubuntu-latest
70-
if: ${{ github.repository_owner == 'spring-projects' }}
71-
steps:
72-
- uses: actions/checkout@v4
73-
- name: Set up gradle
74-
uses: spring-io/spring-gradle-build-action@v2
75-
with:
76-
java-version: 17
77-
distribution: temurin
78-
- name: Check for package tangles
79-
env:
80-
STRUCTURE101_LICENSEID: ${{ secrets.STRUCTURE101_LICENSEID }}
81-
run: |
82-
./gradlew assemble && ./gradlew s101 -Ps101.licenseId="$STRUCTURE101_LICENSEID" --stacktrace
66+
./gradlew --project-dir "$SAMPLES_DIR" --init-script spring-security-ci.gradle -PlocalRepositoryPath="$LOCAL_REPOSITORY_PATH" -PspringSecurityVersion="$version" :runAllTests
8367
deploy-artifacts:
8468
name: Deploy Artifacts
85-
needs: [ build, test, check-samples, check-tangles ]
69+
needs: [ build, test, check-samples ]
8670
uses: spring-io/spring-security-release-tools/.github/workflows/deploy-artifacts.yml@v1
8771
with:
8872
should-deploy-artifacts: ${{ needs.build.outputs.should-deploy-artifacts }}
8973
secrets: inherit
9074
deploy-docs:
9175
name: Deploy Docs
92-
needs: [ build, test, check-samples, check-tangles ]
76+
needs: [ build, test, check-samples ]
9377
uses: spring-io/spring-security-release-tools/.github/workflows/deploy-docs.yml@v1
9478
with:
9579
should-deploy-docs: ${{ needs.build.outputs.should-deploy-artifacts }}
9680
secrets: inherit
9781
deploy-schema:
9882
name: Deploy Schema
99-
needs: [ build, test, check-samples, check-tangles ]
83+
needs: [ build, test, check-samples ]
10084
uses: spring-io/spring-security-release-tools/.github/workflows/deploy-schema.yml@v1
10185
with:
10286
should-deploy-schema: ${{ needs.build.outputs.should-deploy-artifacts }}

acl/spring-security-acl.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ dependencies {
2020
testImplementation "org.springframework:spring-test"
2121

2222
testRuntimeOnly 'org.hsqldb:hsqldb'
23+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2324
}

aspects/spring-security-aspects.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ dependencies {
2727
testImplementation "org.mockito:mockito-junit-jupiter"
2828
testImplementation "org.springframework:spring-test"
2929
testAspect sourceSets.main.output
30+
31+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
3032
}
3133

3234
compileAspectj.ajcOptions.outxmlfile = "META-INF/aop.xml"

build.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ plugins {
2020

2121
apply plugin: 'io.spring.nohttp'
2222
apply plugin: 'locks'
23-
apply plugin: 's101'
2423
apply plugin: 'io.spring.convention.root'
2524
apply plugin: 'org.jetbrains.kotlin.jvm'
2625
apply plugin: 'org.springframework.security.versions.verify-dependencies-versions'
@@ -121,11 +120,6 @@ tasks.register('cloneRepository', IncludeRepoTask) {
121120
outputDirectory = project.hasProperty("cloneOutputDirectory") ? project.file("$cloneOutputDirectory") : defaultDirectory
122121
}
123122

124-
s101 {
125-
repository = 'https://structure101.com/binaries/latest'
126-
configurationDirectory = project.file("etc/s101")
127-
}
128-
129123
wrapperUpgrade {
130124
gradle {
131125
'spring-security' {

buildSrc/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ dependencies {
9595
testImplementation 'org.mockito:mockito-core'
9696
testImplementation 'org.mockito:mockito-junit-jupiter'
9797
testImplementation libs.com.squareup.okhttp3.mockwebserver
98+
99+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
98100
}
99101

100102

buildSrc/src/test/resources/samples/showcase/sgbcs-api/sgbcs-api.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ dependencies {
66
implementation 'org.springframework:spring-core'
77
testImplementation "org.junit.jupiter:junit-jupiter-api"
88
testImplementation "org.junit.jupiter:junit-jupiter-engine"
9+
10+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
911
}
1012

buildSrc/src/test/resources/samples/showcase/sgbcs-core/sgbcs-core.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ dependencies {
55
optional 'ch.qos.logback:logback-classic'
66
testImplementation "org.junit.jupiter:junit-jupiter-api"
77
testImplementation "org.junit.jupiter:junit-jupiter-engine"
8+
9+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
810
}

cas/spring-security-cas.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,6 @@ dependencies {
2222
testImplementation "org.mockito:mockito-junit-jupiter"
2323
testImplementation "org.springframework:spring-test"
2424
testImplementation 'org.skyscreamer:jsonassert'
25+
26+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2527
}

config/spring-security-config.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ dependencies {
126126
testImplementation libs.org.eclipse.jetty.jetty.servlet
127127

128128
testRuntimeOnly 'org.hsqldb:hsqldb'
129+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
129130
}
130131

131132
def rncToXsd = tasks.named('rncToXsd', RncToXsd)

core/spring-security-core.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ dependencies {
4040
testImplementation 'io.mockk:mockk'
4141

4242
testRuntimeOnly 'org.hsqldb:hsqldb'
43+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
4344
}
4445

4546
task springVersion(type: org.gradle.api.tasks.WriteProperties) {

core/src/main/java/org/springframework/security/authorization/method/ExpressionUtils.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.springframework.expression.EvaluationContext;
2020
import org.springframework.expression.EvaluationException;
2121
import org.springframework.expression.Expression;
22+
import org.springframework.security.authorization.AuthorizationDeniedException;
2223
import org.springframework.security.authorization.AuthorizationResult;
2324
import org.springframework.security.authorization.ExpressionAuthorizationDecision;
2425

@@ -43,9 +44,24 @@ static AuthorizationResult evaluate(Expression expr, EvaluationContext ctx) {
4344
"SpEL expression must return either a Boolean or an AuthorizationDecision");
4445
}
4546
catch (EvaluationException ex) {
47+
AuthorizationDeniedException denied = findAuthorizationException(ex);
48+
if (denied != null) {
49+
throw denied;
50+
}
4651
throw new IllegalArgumentException("Failed to evaluate expression '" + expr.getExpressionString() + "'",
4752
ex);
4853
}
4954
}
5055

56+
static AuthorizationDeniedException findAuthorizationException(EvaluationException ex) {
57+
Throwable cause = ex.getCause();
58+
while (cause != null) {
59+
if (cause instanceof AuthorizationDeniedException denied) {
60+
return denied;
61+
}
62+
cause = cause.getCause();
63+
}
64+
return null;
65+
}
66+
5167
}

core/src/test/java/org/springframework/security/authorization/method/ExpressionUtilsTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import org.springframework.expression.spel.standard.SpelExpressionParser;
2323
import org.springframework.expression.spel.support.StandardEvaluationContext;
2424
import org.springframework.security.authorization.AuthorizationDecision;
25+
import org.springframework.security.authorization.AuthorizationDeniedException;
2526
import org.springframework.security.authorization.ExpressionAuthorizationDecision;
2627

2728
import static org.assertj.core.api.Assertions.assertThat;
29+
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
2830

2931
public class ExpressionUtilsTests {
3032

@@ -48,10 +50,23 @@ public void evaluateWhenBooleanThenReturnsExpressionAuthorizationDecision() {
4850
assertThat(ExpressionUtils.evaluate(expression, context)).isInstanceOf(ExpressionAuthorizationDecision.class);
4951
}
5052

53+
@Test
54+
public void evaluateWhenExpressionThrowsAuthorizationDeniedExceptionThenPropagates() {
55+
SpelExpressionParser parser = new SpelExpressionParser();
56+
Expression expression = parser.parseExpression("#root.throwException()");
57+
StandardEvaluationContext context = new StandardEvaluationContext(this);
58+
assertThatExceptionOfType(AuthorizationDeniedException.class)
59+
.isThrownBy(() -> ExpressionUtils.evaluate(expression, context));
60+
}
61+
5162
public AuthorizationDecision returnDecision() {
5263
return new AuthorizationDecisionDetails(false, this.details);
5364
}
5465

66+
public Object throwException() {
67+
throw new AuthorizationDeniedException("denied", new AuthorizationDecision(false));
68+
}
69+
5570
public boolean returnResult() {
5671
return false;
5772
}

crypto/spring-security-crypto.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ dependencies {
1313
testImplementation "org.mockito:mockito-core"
1414
testImplementation "org.mockito:mockito-junit-jupiter"
1515
testImplementation "org.springframework:spring-test"
16+
17+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
1618
}

crypto/src/main/java/org/springframework/security/crypto/bcrypt/BCrypt.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,9 @@ private static String hashpw(byte passwordb[], String salt, boolean for_check) {
611611
int rounds, off;
612612
StringBuilder rs = new StringBuilder();
613613

614+
if (passwordb.length > 72) {
615+
throw new IllegalArgumentException("password cannot be more than 72 bytes");
616+
}
614617
if (salt == null) {
615618
throw new IllegalArgumentException("salt cannot be null");
616619
}

crypto/src/test/java/org/springframework/security/crypto/bcrypt/BCryptPasswordEncoderTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,4 +222,14 @@ public void checkWhenNoRoundsThenTrue() {
222222
assertThat(encoder.matches("wrong", "$2a$00$9N8N35BVs5TLqGL3pspAte5OWWA2a2aZIs.EGp7At7txYakFERMue")).isFalse();
223223
}
224224

225+
@Test
226+
public void enforcePasswordLength() {
227+
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
228+
String password72chars = "123456789012345678901234567890123456789012345678901234567890123456789012";
229+
assertThat(encoder.matches(password72chars, encoder.encode(password72chars))).isTrue();
230+
String password73chars = password72chars.concat("a");
231+
assertThatIllegalArgumentException()
232+
.isThrownBy(() -> encoder.matches(password73chars, encoder.encode(password73chars)));
233+
}
234+
225235
}

data/spring-security-data.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ dependencies {
1515
testImplementation "org.mockito:mockito-junit-jupiter"
1616
testImplementation "org.springframework:spring-test"
1717

18+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
19+
1820
}

docs/modules/ROOT/pages/servlet/appendix/faq.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ class MyAuthoritiesPopulator : LdapAuthoritiesPopulator {
649649

650650
You would then add a bean of this type to your application context and inject it into the `LdapAuthenticationProvider`. This is covered in the section on configuring LDAP by using explicit Spring beans in the LDAP chapter of the reference manual.
651651
Note that you cannot use the namespace for configuration in this case.
652-
You should also consult the security-api-url[Javadoc] for the relevant classes and interfaces.
652+
You should also consult the {security-api-url}[Javadoc] for the relevant classes and interfaces.
653653

654654

655655
[[appendix-faq-namespace-post-processor]]

docs/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"@antora/atlas-extension": "1.0.0-alpha.2",
55
"@antora/collector-extension": "1.0.1",
66
"@asciidoctor/tabs": "1.0.0-beta.6",
7-
"@springio/antora-extensions": "1.14.2",
8-
"@springio/asciidoctor-extensions": "1.0.0-alpha.14"
7+
"@springio/antora-extensions": "1.14.4",
8+
"@springio/asciidoctor-extensions": "1.0.0-alpha.16"
99
}
1010
}

gradle.properties

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,6 @@
1-
#
2-
# Copyright 2002-2024 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-
# https://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-
springBootVersion=3.3.3
17-
version=6.4.3
18-
samplesBranch=main
1+
springBootVersion=3.1.1
2+
version=6.3.9-SNAPSHOT
3+
samplesBranch=6.3.x
194
org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError
205
org.gradle.parallel=true
216
org.gradle.caching=true

gradle/libs.versions.toml

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,17 @@ jakarta-websocket = "2.2.0"
77
org-apache-directory-server = "1.5.5"
88
org-apache-maven-resolver = "1.9.22"
99
org-aspectj = "1.9.22.1"
10-
org-bouncycastle = "1.79"
11-
org-eclipse-jetty = "11.0.24"
10+
org-bouncycastle = "1.78.1"
11+
org-eclipse-jetty = "11.0.25"
1212
org-jetbrains-kotlin = "1.9.25"
1313
org-jetbrains-kotlinx = "1.9.0"
1414
org-mockito = "5.14.2"
1515
org-opensaml = "4.3.2"
16-
org-opensaml5 = "5.1.2"
17-
org-springframework = "6.2.3"
16+
org-springframework = "6.1.18"
1817

1918
[libraries]
20-
ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.16"
21-
com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.18.2"
19+
ch-qos-logback-logback-classic = "ch.qos.logback:logback-classic:1.5.18"
20+
com-fasterxml-jackson-jackson-bom = "com.fasterxml.jackson:jackson-bom:2.17.3"
2221
com-google-inject-guice = "com.google.inject:guice:3.0"
2322
com-netflix-nebula-nebula-project-plugin = "com.netflix.nebula:nebula-project-plugin:8.2.0"
2423
com-nimbusds-nimbus-jose-jwt = "com.nimbusds:nimbus-jose-jwt:9.37.3"
@@ -28,9 +27,9 @@ com-squareup-okhttp3-okhttp = { module = "com.squareup.okhttp3:okhttp", version.
2827
com-unboundid-unboundid-ldapsdk = "com.unboundid:unboundid-ldapsdk:6.0.11"
2928
com-unboundid-unboundid-ldapsdk7 = "com.unboundid:unboundid-ldapsdk:7.0.1"
3029
commons-collections = "commons-collections:commons-collections:3.2.2"
31-
io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.14.4"
32-
io-mockk = "io.mockk:mockk:1.13.16"
33-
io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.15"
30+
io-micrometer-micrometer-observation = "io.micrometer:micrometer-observation:1.12.13"
31+
io-mockk = "io.mockk:mockk:1.13.17"
32+
io-projectreactor-reactor-bom = "io.projectreactor:reactor-bom:2023.0.16"
3433
io-rsocket-rsocket-bom = { module = "io.rsocket:rsocket-bom", version.ref = "io-rsocket" }
3534
io-spring-javaformat-spring-javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "io-spring-javaformat" }
3635
io-spring-javaformat-spring-javaformat-gradle-plugin = { module = "io.spring.javaformat:spring-javaformat-gradle-plugin", version.ref = "io-spring-javaformat" }
@@ -87,8 +86,8 @@ org-seleniumhq-selenium-selenium-java = "org.seleniumhq.selenium:selenium-java:4
8786
org-seleniumhq-selenium-selenium-support = "org.seleniumhq.selenium:selenium-support:3.141.59"
8887
org-skyscreamer-jsonassert = "org.skyscreamer:jsonassert:1.5.3"
8988
org-slf4j-log4j-over-slf4j = "org.slf4j:log4j-over-slf4j:1.7.36"
90-
org-slf4j-slf4j-api = "org.slf4j:slf4j-api:2.0.16"
91-
org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.1.3"
89+
org-slf4j-slf4j-api = "org.slf4j:slf4j-api:2.0.17"
90+
org-springframework-data-spring-data-bom = "org.springframework.data:spring-data-bom:2024.0.10"
9291
org-springframework-ldap-spring-ldap-core = "org.springframework.ldap:spring-ldap-core:3.2.11"
9392
org-springframework-spring-framework-bom = { module = "org.springframework:spring-framework-bom", version.ref = "org-springframework" }
9493
org-synchronoss-cloud-nio-multipart-parser = "org.synchronoss.cloud:nio-multipart-parser:1.1.0"
@@ -103,7 +102,7 @@ org-gretty-gretty = "org.gretty:gretty:4.1.6"
103102
com-github-ben-manes-gradle-versions-plugin = "com.github.ben-manes:gradle-versions-plugin:0.51.0"
104103
com-github-spullara-mustache-java-compiler = "com.github.spullara.mustache.java:compiler:0.9.14"
105104
org-hidetake-gradle-ssh-plugin = "org.hidetake:gradle-ssh-plugin:2.10.1"
106-
org-jfrog-buildinfo-build-info-extractor-gradle = "org.jfrog.buildinfo:build-info-extractor-gradle:4.33.23"
105+
org-jfrog-buildinfo-build-info-extractor-gradle = "org.jfrog.buildinfo:build-info-extractor-gradle:4.33.24"
107106
org-sonarsource-scanner-gradle-sonarqube-gradle-plugin = "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.8.0.1969"
108107
org-instancio-instancio-junit = "org.instancio:instancio-junit:3.7.1"
109108

itest/context/spring-security-itest-context.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ dependencies {
2222

2323
testRuntimeOnly project(':spring-security-config')
2424
testRuntimeOnly 'org.aspectj:aspectjweaver'
25+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2526
}
2627

2728
System.setProperty('python.cachedir.skip', 'true')

itest/ldap/embedded-ldap-apacheds-default/spring-security-itest-ldap-embedded-apacheds-default.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ dependencies {
2525
testImplementation "org.mockito:mockito-core"
2626
testImplementation "org.mockito:mockito-junit-jupiter"
2727
testImplementation "org.springframework:spring-test"
28+
29+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2830
}

itest/ldap/embedded-ldap-mode-apacheds/spring-security-itest-ldap-embedded-mode-apacheds.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ dependencies {
2525
testImplementation "org.mockito:mockito-core"
2626
testImplementation "org.mockito:mockito-junit-jupiter"
2727
testImplementation "org.springframework:spring-test"
28+
29+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2830
}

itest/ldap/embedded-ldap-mode-unboundid/spring-security-itest-ldap-embedded-mode-unboundid.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ dependencies {
1818
testImplementation "org.mockito:mockito-core"
1919
testImplementation "org.mockito:mockito-junit-jupiter"
2020
testImplementation "org.springframework:spring-test"
21+
22+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2123
}

itest/ldap/embedded-ldap-none/spring-security-itest-ldap-embedded-none.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ dependencies {
1717
testImplementation "org.mockito:mockito-core"
1818
testImplementation "org.mockito:mockito-junit-jupiter"
1919
testImplementation "org.springframework:spring-test"
20+
21+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2022
}

itest/ldap/embedded-ldap-unboundid-default/spring-security-itest-ldap-embedded-unboundid-default.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ dependencies {
1818
testImplementation "org.mockito:mockito-core"
1919
testImplementation "org.mockito:mockito-junit-jupiter"
2020
testImplementation "org.springframework:spring-test"
21+
22+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2123
}

itest/web/spring-security-itest-web.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ dependencies {
2525

2626
testRuntimeOnly project(':spring-security-config')
2727
testRuntimeOnly project(':spring-security-ldap')
28+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2829
}
2930

3031
integrationTest {

ldap/spring-security-ldap.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ dependencies {
3939
testImplementation "org.mockito:mockito-junit-jupiter"
4040
testImplementation "org.springframework:spring-test"
4141
testImplementation 'org.skyscreamer:jsonassert'
42-
unboundid7 libs.com.unboundid.unboundid.ldapsdk7
4342

43+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
4444
}
4545

4646
integrationTest {

0 commit comments

Comments
 (0)