Skip to content

Commit dd50dc0

Browse files
committed
Remove Generic Typing From Authentication.Builder
It would be better to introduce parameter types for principal and credentials into Authentication.Builder at the same time as doing so for Authentication Issue spring-projectsgh-17861
1 parent 4744752 commit dd50dc0

File tree

17 files changed

+47
-38
lines changed

17 files changed

+47
-38
lines changed

cas/src/main/java/org/springframework/security/cas/authentication/CasAuthenticationToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public String toString() {
187187
*
188188
* @since 7.0
189189
*/
190-
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<Object, Object, B> {
190+
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<B> {
191191

192192
private Integer keyHash;
193193

cas/src/main/java/org/springframework/security/cas/authentication/CasServiceTicketAuthenticationToken.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public Builder<?> toBuilder() {
126126
*
127127
* @since 7.0
128128
*/
129-
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<String, Object, B> {
129+
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<B> {
130130

131131
private String principal;
132132

@@ -139,9 +139,9 @@ protected Builder(CasServiceTicketAuthenticationToken token) {
139139
}
140140

141141
@Override
142-
public B principal(@Nullable String principal) {
143-
Assert.notNull(principal, "principal cannot be null");
144-
this.principal = principal;
142+
public B principal(@Nullable Object principal) {
143+
Assert.isInstanceOf(String.class, principal, "principal must be of type String");
144+
this.principal = (String) principal;
145145
return (B) this;
146146
}
147147

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public AbstractAuthenticationToken(@Nullable Collection<? extends GrantedAuthori
6969
this.authorities = Collections.unmodifiableList(new ArrayList<>(authorities));
7070
}
7171

72-
protected AbstractAuthenticationToken(AbstractAuthenticationBuilder<?, ?, ?> builder) {
72+
protected AbstractAuthenticationToken(AbstractAuthenticationBuilder<?> builder) {
7373
this(builder.authorities);
7474
this.authenticated = builder.authenticated;
7575
this.details = builder.details;
@@ -197,8 +197,8 @@ public String toString() {
197197
return sb.toString();
198198
}
199199

200-
protected abstract static class AbstractAuthenticationBuilder<P, C, B extends AbstractAuthenticationBuilder<P, C, B>>
201-
implements Authentication.Builder<P, C, B> {
200+
protected abstract static class AbstractAuthenticationBuilder<B extends AbstractAuthenticationBuilder<B>>
201+
implements Authentication.Builder<B> {
202202

203203
protected boolean authenticated;
204204

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public int hashCode() {
126126
*
127127
* @since 7.0
128128
*/
129-
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<Object, Object, B> {
129+
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<B> {
130130

131131
private Integer keyHash;
132132

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public Builder<?> toBuilder() {
9191
*
9292
* @since 7.0
9393
*/
94-
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<Object, Object, B> {
94+
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<B> {
9595

9696
private Object principal;
9797

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public Builder<?> toBuilder() {
141141
*
142142
* @since 7.0
143143
*/
144-
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<Object, Object, B> {
144+
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<B> {
145145

146146
protected @Nullable Object principal;
147147

core/src/main/java/org/springframework/security/authentication/ott/OneTimeTokenAuthentication.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public Builder<?> toBuilder() {
6767
/**
6868
* A builder for constructing a {@link OneTimeTokenAuthentication} instance
6969
*/
70-
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<Object, Object, B> {
70+
public static class Builder<B extends Builder<B>> extends AbstractAuthenticationBuilder<B> {
7171

7272
private Object principal;
7373

core/src/main/java/org/springframework/security/core/Authentication.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public interface Authentication extends Principal, Serializable {
143143
* instance
144144
* @since 7.0
145145
*/
146-
default Builder<?, ?, ?> toBuilder() {
146+
default Builder<?> toBuilder() {
147147
return new SimpleAuthentication.Builder(this);
148148
}
149149

@@ -153,18 +153,18 @@ public interface Authentication extends Principal, Serializable {
153153
* @author Josh Cummings
154154
* @since 7.0
155155
*/
156-
interface Builder<P, C, B extends Builder<P, C, B>> {
156+
interface Builder<B extends Builder<B>> {
157157

158158
B authorities(Consumer<Collection<GrantedAuthority>> authorities);
159159

160-
default B credentials(@Nullable C credentials) {
160+
default B credentials(@Nullable Object credentials) {
161161
throw new UnsupportedOperationException(
162162
String.format("%s does not store credentials", this.getClass().getSimpleName()));
163163
}
164164

165165
B details(@Nullable Object details);
166166

167-
B principal(@Nullable P principal);
167+
B principal(@Nullable Object principal);
168168

169169
B authenticated(boolean authenticated);
170170

core/src/main/java/org/springframework/security/core/SimpleAuthentication.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.util.LinkedHashSet;
2222
import java.util.function.Consumer;
2323

24+
import org.apache.commons.logging.Log;
25+
import org.apache.commons.logging.LogFactory;
2426
import org.jspecify.annotations.Nullable;
2527

2628
@Transient
@@ -83,7 +85,9 @@ public String getName() {
8385
return (this.principal == null) ? "" : this.principal.toString();
8486
}
8587

86-
static final class Builder implements Authentication.Builder<Object, Object, Builder> {
88+
static final class Builder implements Authentication.Builder<Builder> {
89+
90+
private final Log logger = LogFactory.getLog(getClass());
8791

8892
private final Collection<GrantedAuthority> authorities = new LinkedHashSet<>();
8993

@@ -96,11 +100,15 @@ static final class Builder implements Authentication.Builder<Object, Object, Bui
96100
private boolean authenticated;
97101

98102
Builder(Authentication authentication) {
103+
this.logger.debug("Creating a builder which will result in exchanging an authentication of type "
104+
+ authentication.getClass() + " for " + SimpleAuthentication.class.getSimpleName() + ";"
105+
+ " consider implementing " + authentication.getClass().getSimpleName() + "#toBuilder");
99106
this.authorities.addAll(authentication.getAuthorities());
100107
this.principal = authentication.getPrincipal();
101108
this.credentials = authentication.getCredentials();
102109
this.details = authentication.getDetails();
103110
this.authenticated = authentication.isAuthenticated();
111+
104112
}
105113

106114
@Override

core/src/test/java/org/springframework/security/authentication/AbstractAuthenticationBuilderTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void applyWhenAuthoritiesThenAdds() {
4040
}
4141

4242
private static final class TestAbstractAuthenticationBuilder
43-
extends AbstractAuthenticationBuilder<Object, Object, TestAbstractAuthenticationBuilder> {
43+
extends AbstractAuthenticationBuilder<TestAbstractAuthenticationBuilder> {
4444

4545
private TestAbstractAuthenticationBuilder(TestingAuthenticationToken token) {
4646
super(token);

0 commit comments

Comments
 (0)