Skip to content

Commit 9a7cc08

Browse files
committed
revert changes to Authenticator
1 parent 8052098 commit 9a7cc08

File tree

3 files changed

+45
-43
lines changed

3 files changed

+45
-43
lines changed

security/src/main/java/io/micronaut/security/authentication/Authenticator.java

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import java.util.concurrent.ConcurrentHashMap;
4545
import java.util.concurrent.ExecutorService;
4646
import java.util.concurrent.atomic.AtomicReference;
47+
import java.util.function.Function;
4748
import java.util.stream.Collectors;
4849

4950
/**
@@ -54,11 +55,9 @@
5455
* @author Graeme Rocher
5556
* @since 1.0
5657
* @param <T> Request Context Type
57-
* @param <I> Authentication Request Identity Type
58-
* @param <S> Authentication Request Secret Type
5958
*/
6059
@Singleton
61-
public class Authenticator<T, I, S> {
60+
public class Authenticator<T> {
6261

6362
private static final Logger LOG = LoggerFactory.getLogger(Authenticator.class);
6463

@@ -69,10 +68,10 @@ public class Authenticator<T, I, S> {
6968
@Deprecated(forRemoval = true, since = "4.5.0")
7069
protected final Collection<io.micronaut.security.authentication.AuthenticationProvider<T>> authenticationProviders;
7170

72-
private final List<ReactiveAuthenticationProvider<T, I, S>> reactiveAuthenticationProviders;
71+
private final List<ReactiveAuthenticationProvider<T, ?, ?>> reactiveAuthenticationProviders;
7372
private final BeanContext beanContext;
7473

75-
private final List<AuthenticationProvider<T, I, S>> imperativeAuthenticationProviders;
74+
private final List<AuthenticationProvider<T, ?, ?>> imperativeAuthenticationProviders;
7675
private final SecurityConfiguration securityConfiguration;
7776

7877
private final Map<String, Scheduler> executeNameToScheduler = new ConcurrentHashMap<>();
@@ -87,15 +86,15 @@ public class Authenticator<T, I, S> {
8786
*/
8887
@Inject
8988
public Authenticator(BeanContext beanContext,
90-
List<ReactiveAuthenticationProvider<T, I, S>> reactiveAuthenticationProviders,
91-
List<AuthenticationProvider<T, I, S>> authenticationProviders,
89+
List<ReactiveAuthenticationProvider<T, ?, ?>> reactiveAuthenticationProviders,
90+
List<AuthenticationProvider<T, ?, ?>> authenticationProviders,
9291
List<io.micronaut.security.authentication.AuthenticationProvider<T>> deprecatedAuthenticationProviders,
9392
SecurityConfiguration securityConfiguration) {
9493
this.beanContext = beanContext;
9594
this.reactiveAuthenticationProviders = reactiveAuthenticationProviders;
96-
this.reactiveAuthenticationProviders.addAll(deprecatedAuthenticationProviders.stream()
97-
.map(ap -> (ReactiveAuthenticationProvider<T, I, S>) new ReactiveAuthenticationProviderAdapter<T, I, S>(ap))
98-
.toList());
95+
for (io.micronaut.security.authentication.AuthenticationProvider<T> authenticationProvider : deprecatedAuthenticationProviders) {
96+
reactiveAuthenticationProviders.add((new ReactiveAuthenticationProviderAdapter<>(authenticationProvider)));
97+
}
9998
this.securityConfiguration = securityConfiguration;
10099
this.imperativeAuthenticationProviders = authenticationProviders;
101100
this.authenticationProviders = Collections.emptyList();
@@ -108,10 +107,9 @@ public Authenticator(BeanContext beanContext,
108107
* @param securityConfiguration The security configuration
109108
* @deprecated Use {@link Authenticator#Authenticator(BeanContext, List, List, List, SecurityConfiguration)} instead.
110109
*/
111-
@Deprecated
112110
public Authenticator(BeanContext beanContext,
113-
List<ReactiveAuthenticationProvider<T, I, S>> reactiveAuthenticationProviders,
114-
List<AuthenticationProvider<T, I, S>> authenticationProviders,
111+
List<ReactiveAuthenticationProvider<T, ?, ?>> reactiveAuthenticationProviders,
112+
List<AuthenticationProvider<T, ?, ?>> authenticationProviders,
115113
SecurityConfiguration securityConfiguration) {
116114
this.beanContext = beanContext;
117115
this.reactiveAuthenticationProviders = reactiveAuthenticationProviders;
@@ -121,18 +119,19 @@ public Authenticator(BeanContext beanContext,
121119
}
122120

123121
/**
124-
* @param authenticationProviders A list of available authentication providers
122+
* @param deprecatedAuthenticationProviders A list of available authentication providers
125123
* @param securityConfiguration The security configuration
126124
* @deprecated Use {@link Authenticator#Authenticator(BeanContext, List, List, SecurityConfiguration)} instead.
127125
*/
128126
@Deprecated(forRemoval = true, since = "4.5.0")
129-
public Authenticator(Collection<io.micronaut.security.authentication.AuthenticationProvider<T>> authenticationProviders,
127+
public Authenticator(Collection<io.micronaut.security.authentication.AuthenticationProvider<T>> deprecatedAuthenticationProviders,
130128
SecurityConfiguration securityConfiguration) {
131129
this.beanContext = null;
132-
this.authenticationProviders = authenticationProviders;
133-
this.reactiveAuthenticationProviders = authenticationProviders.stream()
134-
.map(ap -> (ReactiveAuthenticationProvider<T, I, S>) new ReactiveAuthenticationProviderAdapter<T, I, S>(ap))
135-
.toList();
130+
this.authenticationProviders = deprecatedAuthenticationProviders;
131+
reactiveAuthenticationProviders = new ArrayList<>();
132+
for (io.micronaut.security.authentication.AuthenticationProvider<T> authenticationProvider : deprecatedAuthenticationProviders) {
133+
reactiveAuthenticationProviders.add((new ReactiveAuthenticationProviderAdapter<>(authenticationProvider)));
134+
}
136135
this.securityConfiguration = securityConfiguration;
137136
this.imperativeAuthenticationProviders = Collections.emptyList();
138137
}
@@ -144,7 +143,7 @@ public Authenticator(Collection<io.micronaut.security.authentication.Authenticat
144143
* @param authenticationRequest Represents a request to authenticate.
145144
* @return A publisher that emits {@link AuthenticationResponse} objects
146145
*/
147-
public Publisher<AuthenticationResponse> authenticate(T requestContext, AuthenticationRequest<I, S> authenticationRequest) {
146+
public Publisher<AuthenticationResponse> authenticate(T requestContext, AuthenticationRequest<?, ?> authenticationRequest) {
148147
if (CollectionUtils.isEmpty(reactiveAuthenticationProviders) && CollectionUtils.isEmpty(imperativeAuthenticationProviders)) {
149148
return Mono.empty();
150149
}
@@ -179,8 +178,8 @@ protected boolean isImperativeAuthenticationProviderIsBlocking(AuthenticationPro
179178

180179
@NonNull
181180
private AuthenticationResponse authenticate(@NonNull T requestContext,
182-
@NonNull AuthenticationRequest<I, S> authenticationRequest,
183-
@NonNull List<AuthenticationProvider<T, I, S>> authenticationProviders,
181+
@NonNull AuthenticationRequest<?, ?> authenticationRequest,
182+
@NonNull List<AuthenticationProvider<T, ?, ?>> authenticationProviders,
184183
@Nullable SecurityConfiguration securityConfiguration) {
185184
if (securityConfiguration != null && securityConfiguration.getAuthenticationProviderStrategy() == AuthenticationStrategy.ALL) {
186185
return authenticateAll(requestContext, authenticationRequest, authenticationProviders);
@@ -194,8 +193,8 @@ private AuthenticationResponse authenticate(@NonNull T requestContext,
194193

195194
@NonNull
196195
private AuthenticationResponse authenticateAll(@NonNull T requestContext,
197-
@NonNull AuthenticationRequest<I, S> authenticationRequest,
198-
@NonNull List<AuthenticationProvider<T, I, S>> authenticationProviders) {
196+
@NonNull AuthenticationRequest<?, ?> authenticationRequest,
197+
@NonNull List<AuthenticationProvider<T, ?, ?>> authenticationProviders) {
199198
List<AuthenticationResponse> authenticationResponses = authenticationProviders.stream()
200199
.map(provider -> authenticationResponse(provider, requestContext, authenticationRequest))
201200
.toList();
@@ -207,8 +206,8 @@ private AuthenticationResponse authenticateAll(@NonNull T requestContext,
207206
: AuthenticationResponse.failure();
208207
}
209208

210-
private List<ReactiveAuthenticationProvider<T, I, S>> everyProviderSorted() {
211-
List<ReactiveAuthenticationProvider<T, I, S>> providers = new ArrayList<>(reactiveAuthenticationProviders);
209+
private List<ReactiveAuthenticationProvider<T, ?, ?>> everyProviderSorted() {
210+
List<ReactiveAuthenticationProvider<T, ?, ?>> providers = new ArrayList<>(reactiveAuthenticationProviders);
212211
if (beanContext != null) {
213212
providers.addAll(imperativeAuthenticationProviders.stream()
214213
.map(imperativeAuthenticationProvider -> {
@@ -227,8 +226,8 @@ private List<ReactiveAuthenticationProvider<T, I, S>> everyProviderSorted() {
227226
}
228227

229228
private Publisher<AuthenticationResponse> authenticate(T request,
230-
AuthenticationRequest<I, S> authenticationRequest,
231-
List<ReactiveAuthenticationProvider<T, I, S>> providers) {
229+
AuthenticationRequest authenticationRequest,
230+
List<ReactiveAuthenticationProvider<T, ?, ?>> providers) {
232231
if (providers == null) {
233232
return Flux.empty();
234233
}
@@ -240,9 +239,11 @@ private Publisher<AuthenticationResponse> authenticate(T request,
240239

241240
return Flux.mergeDelayError(1,
242241
providers.stream()
243-
.map(provider -> Flux.from(provider.authenticate(request, authenticationRequest))
244-
.switchMap(Authenticator::handleResponse)
245-
.switchIfEmpty(Flux.error(() -> new AuthenticationException("Provider did not respond. Authentication rejected"))))
242+
.map(provider ->
243+
Flux.from(provider.authenticate(request, authenticationRequest))
244+
.switchMap(rsp -> Authenticator.handleResponse((AuthenticationResponse) rsp))
245+
.switchIfEmpty(Flux.error(() -> new AuthenticationException("Provider did not respond. Authentication rejected")))
246+
)
246247
.toList()
247248
.toArray(emptyArr))
248249
.last()
@@ -251,12 +252,13 @@ private Publisher<AuthenticationResponse> authenticate(T request,
251252
} else {
252253
AtomicReference<Throwable> lastError = new AtomicReference<>();
253254
Flux<AuthenticationResponse> authentication = Flux.mergeDelayError(1, providers.stream()
254-
.map(auth -> auth.authenticate(request, authenticationRequest))
255-
.map(Flux::from)
256-
.map(sequence -> sequence.switchMap(Authenticator::handleResponse).onErrorResume(t -> {
257-
lastError.set(t);
258-
return Flux.empty();
259-
})).toList()
255+
.map(auth -> Flux.from(auth.authenticate(request, authenticationRequest)))
256+
.map(sequence -> sequence.switchMap(rsp -> Authenticator.handleResponse((AuthenticationResponse) rsp))
257+
.onErrorResume((Function<Throwable, Publisher>) t -> {
258+
lastError.set(t);
259+
return Flux.empty();
260+
})
261+
).toList()
260262
.toArray(emptyArr));
261263

262264
return authentication.take(1)
@@ -290,9 +292,9 @@ private static Mono<AuthenticationResponse> handleResponse(AuthenticationRespons
290292
}
291293

292294
@NonNull
293-
private AuthenticationResponse authenticationResponse(@NonNull AuthenticationProvider<T, I, S> provider,
295+
private AuthenticationResponse authenticationResponse(@NonNull AuthenticationProvider<T, ?, ?> provider,
294296
@NonNull T requestContext,
295-
@NonNull AuthenticationRequest<I, S> authenticationRequest) {
297+
@NonNull AuthenticationRequest authenticationRequest) {
296298
try {
297299
return provider.authenticate(requestContext, authenticationRequest);
298300
} catch (Exception t) {

security/src/main/java/io/micronaut/security/authentication/BasicAuthAuthenticationFetcher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@
3939
public class BasicAuthAuthenticationFetcher<B> implements AuthenticationFetcher<HttpRequest<B>> {
4040

4141
private static final Logger LOG = LoggerFactory.getLogger(BasicAuthAuthenticationFetcher.class);
42-
private final Authenticator<HttpRequest<B>, String, String> authenticator;
42+
private final Authenticator<HttpRequest<B>> authenticator;
4343

4444
/**
4545
* @param authenticator The authenticator to authenticate the credentials
4646
*/
47-
public BasicAuthAuthenticationFetcher(Authenticator<HttpRequest<B>, String, String> authenticator) {
47+
public BasicAuthAuthenticationFetcher(Authenticator<HttpRequest<B>> authenticator) {
4848
this.authenticator = authenticator;
4949
}
5050

security/src/main/java/io/micronaut/security/endpoints/LoginController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
public class LoginController<B> {
6060
private static final Logger LOG = LoggerFactory.getLogger(LoginController.class);
6161

62-
protected final Authenticator<HttpRequest<B>, String, String> authenticator;
62+
protected final Authenticator<HttpRequest<B>> authenticator;
6363
protected final LoginHandler<HttpRequest<?>, MutableHttpResponse<?>> loginHandler;
6464
protected final ApplicationEventPublisher<LoginSuccessfulEvent> loginSuccessfulEventPublisher;
6565
protected final ApplicationEventPublisher<LoginFailedEvent> loginFailedEventPublisher;
@@ -70,7 +70,7 @@ public class LoginController<B> {
7070
* @param loginSuccessfulEventPublisher Application event publisher for {@link LoginSuccessfulEvent}.
7171
* @param loginFailedEventPublisher Application event publisher for {@link LoginFailedEvent}.
7272
*/
73-
public LoginController(Authenticator<HttpRequest<B>, String, String> authenticator,
73+
public LoginController(Authenticator<HttpRequest<B>> authenticator,
7474
LoginHandler<HttpRequest<?>, MutableHttpResponse<?>> loginHandler,
7575
ApplicationEventPublisher<LoginSuccessfulEvent> loginSuccessfulEventPublisher,
7676
ApplicationEventPublisher<LoginFailedEvent> loginFailedEventPublisher) {

0 commit comments

Comments
 (0)