Skip to content

Commit d49e869

Browse files
authored
Merge branch 'main' into gh-18452
Signed-off-by: Rob Winch <362503+rwinch@users.noreply.github.com>
2 parents 925f8fd + 55ab498 commit d49e869

137 files changed

Lines changed: 1247 additions & 634 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

aspects/spring-security-aspects.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
apply plugin: 'io.spring.convention.spring-module'
22
apply plugin: 'io.freefair.aspectj'
3+
apply plugin: 'compile-warnings-error'
34

45
compileAspectj {
56
sourceCompatibility = "17"
67
targetCompatibility = "17"
8+
ajcOptions.compilerArgs += ['-Xlint:ignore']
79
}
810
compileTestAspectj {
911
sourceCompatibility = "17"
1012
targetCompatibility = "17"
13+
ajcOptions.compilerArgs += ['-Xlint:ignore']
1114
}
1215

1316
dependencies {

cas/spring-security-cas.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
plugins {
22
id 'security-nullability'
33
id 'javadoc-warnings-error'
4+
id 'compile-warnings-error'
45
}
56

67
apply plugin: 'io.spring.convention.spring-module'

cas/src/main/java/org/springframework/security/cas/web/CasAuthenticationEntryPoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ public final void commence(final HttpServletRequest servletRequest, HttpServletR
9191
*/
9292
protected String createServiceUrl(HttpServletRequest request, HttpServletResponse response) {
9393
return WebUtils.constructServiceUrl(null, response, this.serviceProperties.getService(), null,
94-
this.serviceProperties.getArtifactParameter(), this.encodeServiceUrlWithSessionId);
94+
this.serviceProperties.getServiceParameter(), this.serviceProperties.getArtifactParameter(),
95+
this.encodeServiceUrlWithSessionId);
9596
}
9697

9798
/**

config/src/integration-test/java/org/springframework/security/config/ldap/LdapBindAuthenticationManagerFactoryITests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.HashSet;
2121
import java.util.Set;
2222

23+
import org.jspecify.annotations.NullMarked;
2324
import org.junit.jupiter.api.Test;
2425
import org.junit.jupiter.api.extension.ExtendWith;
2526

@@ -98,12 +99,14 @@ public void authenticationManagerFactoryWhenCustomAuthoritiesMapperThenUsed() th
9899
public void authenticationManagerFactoryWhenCustomUserDetailsContextMapperThenUsed() throws Exception {
99100
CustomUserDetailsContextMapperConfig.CONTEXT_MAPPER = new UserDetailsContextMapper() {
100101
@Override
102+
@NullMarked
101103
public UserDetails mapUserFromContext(DirContextOperations ctx, String username,
102104
Collection<? extends GrantedAuthority> authorities) {
103105
return User.withUsername("other").password("password").roles("USER").build();
104106
}
105107

106108
@Override
109+
@NullMarked
107110
public void mapUserToContext(UserDetails user, DirContextAdapter ctx) {
108111
}
109112
};

core/src/main/java/org/springframework/security/authentication/TestingAuthenticationToken.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,30 +38,30 @@ public class TestingAuthenticationToken extends AbstractAuthenticationToken {
3838

3939
private static final long serialVersionUID = 1L;
4040

41-
private final Object credentials;
41+
private final @Nullable Object credentials;
4242

4343
private final Object principal;
4444

45-
public TestingAuthenticationToken(Object principal, Object credentials) {
45+
public TestingAuthenticationToken(Object principal, @Nullable Object credentials) {
4646
super((Collection<? extends GrantedAuthority>) null);
4747
this.principal = principal;
4848
this.credentials = credentials;
4949
}
5050

51-
public TestingAuthenticationToken(Object principal, Object credentials, String... authorities) {
51+
public TestingAuthenticationToken(Object principal, @Nullable Object credentials, String... authorities) {
5252
this(principal, credentials, AuthorityUtils.createAuthorityList(authorities));
5353
}
5454

55-
public TestingAuthenticationToken(Object principal, Object credentials, GrantedAuthority... authorities) {
55+
public TestingAuthenticationToken(Object principal, @Nullable Object credentials, GrantedAuthority... authorities) {
5656
this(principal, credentials, Arrays.asList(authorities));
5757
}
5858

59-
public TestingAuthenticationToken(Object principal, Object credentials,
59+
public TestingAuthenticationToken(Object principal, @Nullable Object credentials,
6060
List<? extends GrantedAuthority> authorities) {
6161
this(principal, credentials, (Collection<? extends GrantedAuthority>) authorities);
6262
}
6363

64-
public TestingAuthenticationToken(Object principal, Object credentials,
64+
public TestingAuthenticationToken(Object principal, @Nullable Object credentials,
6565
Collection<? extends GrantedAuthority> authorities) {
6666
super(authorities);
6767
this.principal = principal;
@@ -76,7 +76,7 @@ protected TestingAuthenticationToken(Builder<?> builder) {
7676
}
7777

7878
@Override
79-
public Object getCredentials() {
79+
public @Nullable Object getCredentials() {
8080
return this.credentials;
8181
}
8282

@@ -99,7 +99,7 @@ public static class Builder<B extends Builder<B>> extends AbstractAuthentication
9999

100100
private Object principal;
101101

102-
private Object credentials;
102+
private @Nullable Object credentials;
103103

104104
protected Builder(TestingAuthenticationToken token) {
105105
super(token);
@@ -116,7 +116,6 @@ public B principal(@Nullable Object principal) {
116116

117117
@Override
118118
public B credentials(@Nullable Object credentials) {
119-
Assert.notNull(credentials, "credentials cannot be null");
120119
this.credentials = credentials;
121120
return (B) this;
122121
}

core/src/main/java/org/springframework/security/authorization/RequiredFactor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public static class Builder {
122122
* @param authority the authority.
123123
* @return the builder.
124124
*/
125-
public Builder authority(String authority) {
125+
public Builder authority(@Nullable String authority) {
126126
this.authority = authority;
127127
return this;
128128
}
@@ -205,7 +205,7 @@ public Builder x509Authority() {
205205
* @param validDuration the {@link Duration}.
206206
* @return
207207
*/
208-
public Builder validDuration(Duration validDuration) {
208+
public Builder validDuration(@Nullable Duration validDuration) {
209209
this.validDuration = validDuration;
210210
return this;
211211
}

data/spring-security-data.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ plugins {
44
}
55

66
apply plugin: 'io.spring.convention.spring-module'
7+
apply plugin: 'compile-warnings-error'
78

89
dependencies {
910
management platform(project(":spring-security-dependencies"))

data/src/test/java/org/springframework/security/data/repository/query/SecurityEvaluationContextExtensionTests.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl;
2828
import org.springframework.security.authentication.AuthenticationTrustResolver;
2929
import org.springframework.security.authentication.TestingAuthenticationToken;
30+
import org.springframework.security.authorization.DefaultAuthorizationManagerFactory;
3031
import org.springframework.security.core.context.SecurityContextHolder;
3132
import org.springframework.security.core.context.SecurityContextHolderStrategy;
3233
import org.springframework.security.core.context.SecurityContextImpl;
@@ -90,6 +91,7 @@ public void getRootObjectExplicitAuthentication() {
9091
}
9192

9293
@Test
94+
@SuppressWarnings("deprecation")
9395
public void setTrustResolverWhenNullThenIllegalArgumentException() {
9496
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "ROLE_EXPLICIT");
9597
this.securityExtension = new SecurityEvaluationContextExtension(explicit);
@@ -98,6 +100,7 @@ public void setTrustResolverWhenNullThenIllegalArgumentException() {
98100
}
99101

100102
@Test
103+
@SuppressWarnings("deprecation")
101104
public void setTrustResolverWhenNotNullThenVerifyRootObject() {
102105
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "ROLE_EXPLICIT");
103106
this.securityExtension = new SecurityEvaluationContextExtension(explicit);
@@ -109,6 +112,7 @@ public void setTrustResolverWhenNotNullThenVerifyRootObject() {
109112
}
110113

111114
@Test
115+
@SuppressWarnings("deprecation")
112116
public void setRoleHierarchyWhenNullThenIllegalArgumentException() {
113117
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "ROLE_EXPLICIT");
114118
this.securityExtension = new SecurityEvaluationContextExtension(explicit);
@@ -117,6 +121,7 @@ public void setRoleHierarchyWhenNullThenIllegalArgumentException() {
117121
}
118122

119123
@Test
124+
@SuppressWarnings("deprecation")
120125
public void setRoleHierarchyWhenNotNullThenVerifyRootObject() {
121126
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "ROLE_PARENT");
122127
this.securityExtension = new SecurityEvaluationContextExtension(explicit);
@@ -143,6 +148,7 @@ public void setPermissionEvaluatorWhenNotNullThenVerifyRootObject() {
143148
}
144149

145150
@Test
151+
@SuppressWarnings("deprecation")
146152
public void setDefaultRolePrefixWhenCustomThenVerifyRootObject() {
147153
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "CUSTOM_EXPLICIT");
148154
this.securityExtension = new SecurityEvaluationContextExtension(explicit);
@@ -151,6 +157,41 @@ public void setDefaultRolePrefixWhenCustomThenVerifyRootObject() {
151157
assertThat(getRoot().hasRole("EXPLICIT")).isTrue();
152158
}
153159

160+
@Test
161+
public void setAuthorizationManagerFactoryWithTrustResolverThenVerifyRootObject() {
162+
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "ROLE_EXPLICIT");
163+
this.securityExtension = new SecurityEvaluationContextExtension(explicit);
164+
AuthenticationTrustResolver trustResolver = mock(AuthenticationTrustResolver.class);
165+
given(trustResolver.isAuthenticated(explicit)).willReturn(true);
166+
DefaultAuthorizationManagerFactory<Object> factory = new DefaultAuthorizationManagerFactory<>();
167+
factory.setTrustResolver(trustResolver);
168+
this.securityExtension.setAuthorizationManagerFactory(factory);
169+
assertThat(getRoot().isAuthenticated()).isTrue();
170+
verify(trustResolver).isAuthenticated(explicit);
171+
}
172+
173+
@Test
174+
public void setAuthorizationManagerFactoryWithRoleHierarchyThenVerifyRootObject() {
175+
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "ROLE_PARENT");
176+
this.securityExtension = new SecurityEvaluationContextExtension(explicit);
177+
RoleHierarchy roleHierarchy = RoleHierarchyImpl.fromHierarchy("ROLE_PARENT > ROLE_EXPLICIT");
178+
DefaultAuthorizationManagerFactory<Object> factory = new DefaultAuthorizationManagerFactory<>();
179+
factory.setRoleHierarchy(roleHierarchy);
180+
this.securityExtension.setAuthorizationManagerFactory(factory);
181+
assertThat(getRoot().hasRole("EXPLICIT")).isTrue();
182+
}
183+
184+
@Test
185+
public void setAuthorizationManagerFactoryWithRolePrefixThenVerifyRootObject() {
186+
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "CUSTOM_EXPLICIT");
187+
this.securityExtension = new SecurityEvaluationContextExtension(explicit);
188+
String customRolePrefix = "CUSTOM_";
189+
DefaultAuthorizationManagerFactory<Object> factory = new DefaultAuthorizationManagerFactory<>();
190+
factory.setRolePrefix(customRolePrefix);
191+
this.securityExtension.setAuthorizationManagerFactory(factory);
192+
assertThat(getRoot().hasRole("EXPLICIT")).isTrue();
193+
}
194+
154195
@Test
155196
public void getRootObjectWhenAdditionalFieldsNotSetThenVerifyDefaults() {
156197
TestingAuthenticationToken explicit = new TestingAuthenticationToken("explicit", "password", "ROLE_EXPLICIT");

docs/spring-security-docs.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ plugins {
66
id 'java-toolchain'
77
id 'test-compile-target-jdk25'
88
id 'javadoc-warnings-error'
9+
id 'compile-warnings-error'
910
}
1011

1112
apply plugin: 'io.spring.convention.docs'

docs/src/test/kotlin/org/springframework/security/kt/docs/features/authentication/authenticationcompromisedpasswordcheck/CompromisedPasswordCheckerUsage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import org.springframework.security.web.authentication.SimpleUrlAuthenticationFa
1515
import org.springframework.security.web.authentication.password.HaveIBeenPwnedRestApiPasswordChecker
1616

1717

18-
class CompromisedPasswordCheckerUsage {
18+
open class CompromisedPasswordCheckerUsage {
1919
// tag::configuration[]
2020
@Bean
2121
open fun filterChain(http: HttpSecurity): SecurityFilterChain {

0 commit comments

Comments
 (0)