You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2019/12/07 11:48:29 UTC
[isis] 01/06: ISIS-2218: renames AuthenticationManagerDefault
(class) to AuthenticationManager
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit e94e1d7479fc1e68a453a6b10f514719b3acb4d4
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Dec 7 10:17:00 2019 +0000
ISIS-2218: renames AuthenticationManagerDefault (class) to AuthenticationManager
Latter was previously an interface.
Also:
- KeycloakAuthenticator renamed as AuthenticatorKeycloak, declared as @Service rather than @Bean
- ditto for shiro
- constructor injection for AuthenticationManager
---
.../isis/security/api/IsisModuleSecurityApi.java | 6 +-
.../api/authentication/AuthenticationSession.java | 3 +-
.../AuthenticationRequestLogonFixture.java | 4 +-
.../manager/AuthenticationManager.java | 151 +++++++++++++--
.../standard/AuthenticationManagerDefault.java | 206 ---------------------
.../standard/AuthenticatorAbstract.java | 4 +-
.../standard/AuthenticatorDefault.java | 28 ---
.../PasswordRequestAuthenticatorAbstract.java | 36 ----
...0Chars.java => RandomCodeGeneratorDefault.java} | 18 +-
.../standard/RandomCodeGeneratorUUID.java | 40 ----
.../api/authentication/standard/Registrar.java | 7 -
.../standard/RegistrationDetailsPassword.java | 18 +-
...rdAuthenticationManager_AuthenticationTest.java | 9 +-
...rdAuthenticationManager_AuthenticatorsTest.java | 8 +-
.../keycloak/IsisModuleSecurityKeycloak.java | 10 +-
...thenticator.java => AuthenticatorKeycloak.java} | 34 ++--
.../keycloak/webmodule/WebModuleKeycloak.java | 2 +-
.../security/shiro/IsisModuleSecurityShiro.java | 9 +-
...oAuthenticator.java => AuthenticatorShiro.java} | 48 +++--
.../security/shiro/webmodule/WebModuleShiro.java | 2 +-
...AuthenticatorOrAuthorizorTest_authenticate.java | 6 +-
...ticatorOrAuthorizorTest_isVisibleInAnyRole.java | 6 +-
.../components/AuthenticationManagerNull.java | 56 ------
23 files changed, 226 insertions(+), 485 deletions(-)
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/IsisModuleSecurityApi.java b/core/security/api/src/main/java/org/apache/isis/security/api/IsisModuleSecurityApi.java
index fbe7609..5bff1eb 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/api/IsisModuleSecurityApi.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/api/IsisModuleSecurityApi.java
@@ -18,14 +18,16 @@
*/
package org.apache.isis.security.api;
-import org.apache.isis.security.api.authentication.standard.AuthenticationManagerDefault;
+import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
+import org.apache.isis.security.api.authentication.standard.RandomCodeGeneratorDefault;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import({
// @Service's
- AuthenticationManagerDefault.class
+ AuthenticationManager.class,
+ RandomCodeGeneratorDefault.class,
})
public class IsisModuleSecurityApi {
}
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/AuthenticationSession.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/AuthenticationSession.java
index 14fc5e6..2331198 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/AuthenticationSession.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/AuthenticationSession.java
@@ -27,7 +27,6 @@ import java.util.stream.Stream;
import org.apache.isis.applib.security.UserMemento;
import org.apache.isis.commons.internal.encoding.Encodable;
import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
-import org.apache.isis.security.api.authentication.standard.AuthenticationManagerDefault;
/**
* The representation within the system of an authenticated user.
@@ -102,7 +101,7 @@ public interface AuthenticationSession extends Encodable, Serializable {
public enum Type {
DEFAULT,
/**
- * Instructs the {@link AuthenticationManagerDefault} to not cache this session in its internal map of
+ * Instructs the {@link AuthenticationManager} to not cache this session in its internal map of
* sessions by validation code, and therefore to ignore this aspect when considering if an
* {@link AuthenticationSession} is
* {@link AuthenticationManager#isSessionValid(AuthenticationSession) valid} or not.
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/fixtures/AuthenticationRequestLogonFixture.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/fixtures/AuthenticationRequestLogonFixture.java
index 3d62f58..f268b67 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/fixtures/AuthenticationRequestLogonFixture.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/fixtures/AuthenticationRequestLogonFixture.java
@@ -24,13 +24,13 @@ import java.util.Collections;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.security.api.authentication.AuthenticationRequestAbstract;
-import org.apache.isis.security.api.authentication.standard.AuthenticationManagerDefault;
+import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
/**
* For testing purposes, request corresponding to a {@link LogonFixture}.
*
* <p>
- * Understood directly by {@link AuthenticationManagerDefault}.
+ * Understood directly by {@link AuthenticationManager}.
*/
public class AuthenticationRequestLogonFixture extends AuthenticationRequestAbstract {
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/manager/AuthenticationManager.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/manager/AuthenticationManager.java
index 41d337b..b66c992 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/manager/AuthenticationManager.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/manager/AuthenticationManager.java
@@ -19,27 +19,150 @@
package org.apache.isis.security.api.authentication.manager;
+import lombok.extern.log4j.Log4j2;
+import lombok.val;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.util.ToString;
+import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.security.api.authentication.AuthenticationRequest;
import org.apache.isis.security.api.authentication.AuthenticationSession;
+import org.apache.isis.security.api.authentication.standard.*;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+@Service
+@Named("isisSecurityApi.AuthenticationManager")
+@Order(OrderPrecedence.MIDPOINT)
+@Primary
+@Qualifier("Default")
+@Log4j2
+public class AuthenticationManager {
+
+ private final Map<String, String> userByValidationCode = _Maps.newHashMap();
+
+ private final RandomCodeGenerator randomCodeGenerator;
+ private final List<Authenticator> authenticators;
+ private final List<Registrar> registrars;
+
+ @Inject
+ public AuthenticationManager(
+ final List<Authenticator> authenticators,
+ final RandomCodeGenerator randomCodeGenerator) {
+ this.randomCodeGenerator = randomCodeGenerator;
+ this.authenticators = authenticators;
+ if (authenticators.isEmpty()) {
+ throw new NoAuthenticatorException("No authenticators specified");
+ }
+
+ registrars = authenticators.stream()
+ .filter(Registrar.class::isInstance)
+ .map(Registrar.class::cast)
+ .collect(_Lists.toUnmodifiable());
+ }
+
+ // -- SESSION MANAGEMENT (including authenticate)
+
+ public synchronized final AuthenticationSession authenticate(AuthenticationRequest request) {
+
+ if (request == null) {
+ return null;
+ }
+
+ val compatibleAuthenticators = _NullSafe.stream(authenticators)
+ .filter(authenticator->authenticator.canAuthenticate(request.getClass()))
+ .collect(Collectors.toList());
+
+ if (compatibleAuthenticators.size() == 0) {
+ throw new NoAuthenticatorException("No authenticator available for processing " + request.getClass().getName());
+ }
+
+ for (final Authenticator authenticator : compatibleAuthenticators) {
+ val authSession = authenticator.authenticate(request, getUnusedRandomCode());
+ if (authSession != null) {
+ userByValidationCode.put(authSession.getValidationCode(), authSession.getUserName());
+ return authSession;
+ }
+ }
+
+ return null;
+ }
+
+ private String getUnusedRandomCode() {
+ String code;
+ do {
+ code = randomCodeGenerator.generateRandomCode();
+ } while (userByValidationCode.containsKey(code));
+
+ return code;
+ }
+
+
+ public final boolean isSessionValid(final AuthenticationSession session) {
+ if(session instanceof SimpleSession) {
+ final SimpleSession simpleSession = (SimpleSession) session;
+ if(simpleSession.getType() == AuthenticationSession.Type.EXTERNAL) {
+ return true;
+ }
+ }
+ final String userName = userByValidationCode.get(session.getValidationCode());
+ return session.hasUserNameOf(userName);
+ }
+
+
+ public void closeSession(AuthenticationSession session) {
+ for (Authenticator authenticator : authenticators) {
+ authenticator.logout(session);
+ }
+ userByValidationCode.remove(session.getValidationCode());
+ }
+
+ // -- AUTHENTICATORS
+
+ public boolean register(RegistrationDetails registrationDetails) {
+ for (val registrar : this.registrars) {
+ if (registrar.canRegister(registrationDetails.getClass())) {
+ return registrar.register(registrationDetails);
+ }
+ }
+ return false;
+ }
+
+
+ public boolean supportsRegistration(Class<? extends RegistrationDetails> registrationDetailsClass) {
+ for (val registrar : this.registrars) {
+ if (registrar.canRegister(registrationDetailsClass)) {
+ return true;
+ }
+ }
+ return false;
+ }
-public interface AuthenticationManager {
- /**
- * Caches and returns an authentication {@link AuthenticationSession} if the
- * {@link AuthenticationRequest request} is valid; otherwise returns
- * <tt>null</tt>.
- */
- AuthenticationSession authenticate(AuthenticationRequest request);
- boolean supportsRegistration(Class<? extends RegistrationDetails> registrationDetailsClass);
+ // -- DEBUGGING
+
+ private final static ToString<AuthenticationManager> toString =
+ ToString.<AuthenticationManager>toString("class", obj->obj.getClass().getSimpleName())
+ .thenToString("authenticators", obj->""+obj.authenticators.size())
+ .thenToString("users", obj->""+obj.userByValidationCode.size());
- boolean register(RegistrationDetails registrationDetails);
+ @Override
+ public String toString() {
+ return toString.toString(this);
+ }
- /**
- * Whether the provided {@link AuthenticationSession} is still valid.
- */
- boolean isSessionValid(AuthenticationSession authenticationSession);
- void closeSession(AuthenticationSession authenticationSession);
}
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticationManagerDefault.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticationManagerDefault.java
deleted file mode 100644
index 59a7f42..0000000
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticationManagerDefault.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.security.api.authentication.standard;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.applib.util.ToString;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.base._Lazy;
-import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.security.api.authentication.AuthenticationRequest;
-import org.apache.isis.security.api.authentication.AuthenticationSession;
-import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
-import org.apache.isis.security.api.authentication.manager.RegistrationDetails;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Service;
-
-import static org.apache.isis.commons.internal.base._With.requires;
-
-import lombok.Getter;
-import lombok.extern.log4j.Log4j2;
-import lombok.val;
-
-@Service
-@Named("isisSecurityApi.AuthenticationManagerDefault")
-@Order(OrderPrecedence.MIDPOINT)
-@Primary
-@Qualifier("Default")
-@Log4j2
-public class AuthenticationManagerDefault implements AuthenticationManager {
-
- @Inject private ServiceRegistry serviceRegistry;
-
- private final Map<String, String> userByValidationCode = _Maps.newHashMap();
- private final _Lazy<RandomCodeGenerator> randomCodeGenerator =
- _Lazy.threadSafe(this::getDefaultRandomCodeGenerator);
-
- @Getter private RandomCodeGenerator defaultRandomCodeGenerator = new RandomCodeGenerator10Chars();
- @Getter private Can<Authenticator> authenticators;
-
- @PostConstruct
- public void init() {
- authenticators = serviceRegistry.select(Authenticator.class);
- if (authenticators.isEmpty()) {
- throw new NoAuthenticatorException("No authenticators specified");
- }
- }
-
- // -- SESSION MANAGEMENT (including authenticate)
-
- @Override
- public synchronized final AuthenticationSession authenticate(AuthenticationRequest request) {
-
- if (request == null) {
- return null;
- }
-
- val compatibleAuthenticators = _NullSafe.stream(authenticators)
- .filter(authenticator->authenticator.canAuthenticate(request.getClass()))
- .collect(Collectors.toList());
-
- if (compatibleAuthenticators.size() == 0) {
- throw new NoAuthenticatorException("No authenticator available for processing " + request.getClass().getName());
- }
-
- for (final Authenticator authenticator : compatibleAuthenticators) {
- val authSession = authenticator.authenticate(request, getUnusedRandomCode());
- if (authSession != null) {
- userByValidationCode.put(authSession.getValidationCode(), authSession.getUserName());
- return authSession;
- }
- }
-
- return null;
- }
-
- private String getUnusedRandomCode() {
- String code;
- do {
- code = randomCodeGenerator.get().generateRandomCode();
- } while (userByValidationCode.containsKey(code));
-
- return code;
- }
-
-
- @Override
- public final boolean isSessionValid(final AuthenticationSession session) {
- if(session instanceof SimpleSession) {
- final SimpleSession simpleSession = (SimpleSession) session;
- if(simpleSession.getType() == AuthenticationSession.Type.EXTERNAL) {
- return true;
- }
- }
- final String userName = userByValidationCode.get(session.getValidationCode());
- return session.hasUserNameOf(userName);
- }
-
-
- @Override
- public void closeSession(AuthenticationSession session) {
- for (Authenticator authenticator : authenticators) {
- authenticator.logout(session);
- }
- userByValidationCode.remove(session.getValidationCode());
- }
-
- // -- AUTHENTICATORS
-
- @Override
- public boolean register(RegistrationDetails registrationDetails) {
- for (val registrar : getRegistrars()) {
- if (registrar.canRegister(registrationDetails.getClass())) {
- return registrar.register(registrationDetails);
- }
- }
- return false;
- }
-
-
- @Override
- public boolean supportsRegistration(Class<? extends RegistrationDetails> registrationDetailsClass) {
- for (val registrar : getRegistrars()) {
- if (registrar.canRegister(registrationDetailsClass)) {
- return true;
- }
- }
- return false;
- }
-
- private final _Lazy<List<Registrar>> registrars = _Lazy.threadSafe(this::toRegistrars);
-
- public List<Registrar> getRegistrars() {
- return registrars.get();
- }
-
- private List<Registrar> toRegistrars() {
- return getAuthenticators().stream()
- .map(Registrar.AS_REGISTRAR_ELSE_NULL)
- .filter(_NullSafe::isPresent)
- .collect(_Lists.toUnmodifiable());
- }
-
- // -- RANDOM CODE GENERATOR
-
- public void setRandomCodeGenerator(RandomCodeGenerator randomCodeGenerator) {
- requires(randomCodeGenerator, "randomCodeGenerator");
- this.defaultRandomCodeGenerator = randomCodeGenerator;
- this.randomCodeGenerator.clear(); // invalidate
- }
-
- // -- DEBUGGING
-
- private final static ToString<AuthenticationManagerDefault> toString =
- ToString.<AuthenticationManagerDefault>toString("class", obj->obj.getClass().getSimpleName())
- .thenToString("authenticators", obj->""+obj.authenticators.size())
- .thenToString("users", obj->""+obj.userByValidationCode.size());
-
- @Override
- public String toString() {
- return toString.toString(this);
- }
-
-
- /**
- * JUnit Test Support
- * @param mockAuthenticator
- * @return
- */
- public static AuthenticationManagerDefault instanceForTesting(Authenticator authenticator) {
- val manager = new AuthenticationManagerDefault();
- manager.authenticators = Can.ofSingleton(authenticator);
- return manager;
- }
-
-
-}
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticatorAbstract.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticatorAbstract.java
index 999fea1..55b7ea3 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticatorAbstract.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticatorAbstract.java
@@ -29,7 +29,7 @@ public abstract class AuthenticatorAbstract implements Authenticator {
* if required.
*/
@Override
- public AuthenticationSession authenticate(final AuthenticationRequest request, final String code) {
+ public final AuthenticationSession authenticate(final AuthenticationRequest request, final String code) {
if (!isValid(request)) {
return null;
}
@@ -44,7 +44,7 @@ public abstract class AuthenticatorAbstract implements Authenticator {
protected abstract boolean isValid(AuthenticationRequest request);
@Override
- public void logout(final AuthenticationSession session) {
+ public final void logout(final AuthenticationSession session) {
// no-op
}
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticatorDefault.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticatorDefault.java
deleted file mode 100644
index 4e650ce..0000000
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/AuthenticatorDefault.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.security.api.authentication.standard;
-
-public abstract class AuthenticatorDefault extends AuthenticatorAbstract {
-
- public AuthenticatorDefault() {
- super();
- }
-
-}
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/PasswordRequestAuthenticatorAbstract.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/PasswordRequestAuthenticatorAbstract.java
deleted file mode 100644
index adabc79..0000000
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/PasswordRequestAuthenticatorAbstract.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.security.api.authentication.standard;
-
-import org.apache.isis.security.api.authentication.AuthenticationRequest;
-import org.apache.isis.security.api.authentication.AuthenticationRequestPassword;
-
-public abstract class PasswordRequestAuthenticatorAbstract extends AuthenticatorAbstract {
-
- public PasswordRequestAuthenticatorAbstract() {
- super();
- }
-
- @Override
- public final boolean canAuthenticate(final Class<? extends AuthenticationRequest> authenticationRequestClass) {
- return AuthenticationRequestPassword.class.isAssignableFrom(authenticationRequestClass);
- }
-
-}
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGenerator10Chars.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGeneratorDefault.java
similarity index 73%
rename from core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGenerator10Chars.java
rename to core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGeneratorDefault.java
index 60e10e0..1127061 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGenerator10Chars.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGeneratorDefault.java
@@ -18,9 +18,25 @@
*/
package org.apache.isis.security.api.authentication.standard;
+import lombok.extern.log4j.Log4j2;
+
import java.util.Random;
-public class RandomCodeGenerator10Chars implements RandomCodeGenerator {
+import javax.inject.Named;
+
+import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Component
+@Named("isisSecurityApi.RandomCodeGenerator10Chars")
+@Order(OrderPrecedence.LOW)
+@Primary
+@Qualifier("Default")
+@Log4j2
+public class RandomCodeGeneratorDefault implements RandomCodeGenerator {
private static final int NUMBER_CHARACTERS = 10;
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGeneratorUUID.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGeneratorUUID.java
deleted file mode 100644
index 2a84acf..0000000
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RandomCodeGeneratorUUID.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.security.api.authentication.standard;
-
-import java.util.UUID;
-
-public class RandomCodeGeneratorUUID implements RandomCodeGenerator {
-
- /**
- * Generates a random string in the form <tt>XXXX-XX-XX-XX-XXXXXX</tt> where
- * X is a hexadecimal.
- *
- * <p>
- * Implementation uses Java's own {@link UUID} class.
- *
- * @see UUID#toString() for details on the formatting.
- */
- @Override
- public String generateRandomCode() {
- return java.util.UUID.randomUUID().toString();
- }
-
-}
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/Registrar.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/Registrar.java
index 9adc67f..aee8e03 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/Registrar.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/Registrar.java
@@ -26,13 +26,6 @@ import org.apache.isis.security.api.authentication.manager.RegistrationDetails;
public interface Registrar extends Authenticator, ApplicationScopedComponent {
- static Function<Authenticator, Registrar> AS_REGISTRAR_ELSE_NULL = (final Authenticator input) -> {
- if (input instanceof Registrar) {
- return (Registrar) input;
- }
- return null;
- };
-
/**
* Whether the provided {@link RegistrationDetails} is recognized by this
* {@link Registrar}.
diff --git a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RegistrationDetailsPassword.java b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RegistrationDetailsPassword.java
index 2eb16b6..c12533d 100644
--- a/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RegistrationDetailsPassword.java
+++ b/core/security/api/src/main/java/org/apache/isis/security/api/authentication/standard/RegistrationDetailsPassword.java
@@ -18,25 +18,15 @@
*/
package org.apache.isis.security.api.authentication.standard;
+import lombok.Data;
+import lombok.Getter;
+
import org.apache.isis.security.api.authentication.manager.RegistrationDetails;
+@Data
public class RegistrationDetailsPassword implements RegistrationDetails {
private final String user;
private final String password;
- public RegistrationDetailsPassword(final String user, final String password) {
- super();
- this.user = user;
- this.password = password;
- }
-
- public String getUser() {
- return user;
- }
-
- public String getPassword() {
- return password;
- }
-
}
diff --git a/core/security/api/src/test/java/org/apache/isis/security/authentication/standard/StandardAuthenticationManager_AuthenticationTest.java b/core/security/api/src/test/java/org/apache/isis/security/authentication/standard/StandardAuthenticationManager_AuthenticationTest.java
index 200d9c0..4d6a910 100644
--- a/core/security/api/src/test/java/org/apache/isis/security/authentication/standard/StandardAuthenticationManager_AuthenticationTest.java
+++ b/core/security/api/src/test/java/org/apache/isis/security/authentication/standard/StandardAuthenticationManager_AuthenticationTest.java
@@ -19,7 +19,9 @@
package org.apache.isis.security.authentication.standard;
-import org.apache.isis.security.api.authentication.standard.AuthenticationManagerDefault;
+import java.util.Collections;
+
+import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
import org.apache.isis.security.api.authentication.standard.Authenticator;
import org.apache.isis.security.api.authentication.standard.RandomCodeGenerator;
import org.hamcrest.Description;
@@ -45,7 +47,7 @@ public class StandardAuthenticationManager_AuthenticationTest {
private final Mockery mockery = new JUnit4Mockery();
- private AuthenticationManagerDefault authenticationManager;
+ private AuthenticationManager authenticationManager;
private RandomCodeGenerator mockRandomCodeGenerator;
private Authenticator mockAuthenticator;
@@ -57,8 +59,7 @@ public class StandardAuthenticationManager_AuthenticationTest {
mockAuthenticator = mockery.mock(Authenticator.class);
mockAuthSession = mockery.mock(AuthenticationSession.class);
- authenticationManager = AuthenticationManagerDefault.instanceForTesting(mockAuthenticator);
- authenticationManager.setRandomCodeGenerator(mockRandomCodeGenerator);
+ authenticationManager = new AuthenticationManager(Collections.singletonList(mockAuthenticator), mockRandomCodeGenerator);
mockery.checking(new Expectations() {
{
diff --git a/core/security/api/src/test/java/org/apache/isis/security/authentication/standard/StandardAuthenticationManager_AuthenticatorsTest.java b/core/security/api/src/test/java/org/apache/isis/security/authentication/standard/StandardAuthenticationManager_AuthenticatorsTest.java
index b11a1a2..2912f7d 100644
--- a/core/security/api/src/test/java/org/apache/isis/security/authentication/standard/StandardAuthenticationManager_AuthenticatorsTest.java
+++ b/core/security/api/src/test/java/org/apache/isis/security/authentication/standard/StandardAuthenticationManager_AuthenticatorsTest.java
@@ -19,7 +19,7 @@
package org.apache.isis.security.authentication.standard;
-import org.apache.isis.security.api.authentication.standard.AuthenticationManagerDefault;
+import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
import org.apache.isis.security.api.authentication.standard.Authenticator;
import org.apache.isis.security.api.authentication.standard.NoAuthenticatorException;
import org.jmock.Mockery;
@@ -39,7 +39,7 @@ public class StandardAuthenticationManager_AuthenticatorsTest {
private final Mockery mockery = new JUnit4Mockery();
- private AuthenticationManagerDefault authenticationManager;
+ private AuthenticationManager authenticationManager;
private Authenticator mockAuthenticator;
@Before
@@ -56,7 +56,7 @@ public class StandardAuthenticationManager_AuthenticatorsTest {
@Test(expected = NoAuthenticatorException.class)
public void shouldNotBeAbleToAuthenticateWithNoAuthenticators() throws Exception {
- authenticationManager = new AuthenticationManagerDefault();
+ authenticationManager = new AuthenticationManager(authenticators, randomCodeGenerator);
authenticationManager.authenticate(new AuthenticationRequestPassword("foo", "bar"));
}
@@ -64,7 +64,7 @@ public class StandardAuthenticationManager_AuthenticatorsTest {
@Test
public void shouldBeAbleToUseAuthenticators() throws Exception {
- authenticationManager = AuthenticationManagerDefault.instanceForTesting(mockAuthenticator);
+ authenticationManager = AuthenticationManager.instanceForTesting(mockAuthenticator);
assertThat(authenticationManager.getAuthenticators().size(), is(1));
assertThat(authenticationManager.getAuthenticators().getFirst().get(), is(sameInstance(mockAuthenticator)));
diff --git a/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/IsisModuleSecurityKeycloak.java b/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/IsisModuleSecurityKeycloak.java
index 4610c5c..f29c06a 100644
--- a/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/IsisModuleSecurityKeycloak.java
+++ b/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/IsisModuleSecurityKeycloak.java
@@ -21,8 +21,7 @@ package org.apache.isis.security.keycloak;
import javax.inject.Singleton;
import org.apache.isis.runtime.services.IsisModuleRuntimeServices;
-import org.apache.isis.security.api.IsisModuleSecurityApi;
-import org.apache.isis.security.keycloak.authentication.KeycloakAuthenticator;
+import org.apache.isis.security.keycloak.authentication.AuthenticatorKeycloak;
import org.apache.isis.security.keycloak.authorization.KeycloakAuthorizor;
import org.apache.isis.security.keycloak.webmodule.WebModuleKeycloak;
import org.apache.isis.webapp.IsisModuleWebapp;
@@ -30,7 +29,6 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
-import org.apache.isis.security.api.authentication.standard.Authenticator;
import org.apache.isis.security.api.authorization.standard.Authorizor;
/**
@@ -45,17 +43,13 @@ import org.apache.isis.security.api.authorization.standard.Authorizor;
IsisModuleWebapp.class,
// @Service's
+ AuthenticatorKeycloak.class,
WebModuleKeycloak.class,
})
public class IsisModuleSecurityKeycloak {
@Bean @Singleton
- public Authenticator authenticator() {
- return new KeycloakAuthenticator();
- }
-
- @Bean @Singleton
public Authorizor autorizor() {
return new KeycloakAuthorizor();
}
diff --git a/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/KeycloakAuthenticator.java b/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/AuthenticatorKeycloak.java
similarity index 77%
rename from core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/KeycloakAuthenticator.java
rename to core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/AuthenticatorKeycloak.java
index 8192a06..99573df 100644
--- a/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/KeycloakAuthenticator.java
+++ b/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/authentication/AuthenticatorKeycloak.java
@@ -18,34 +18,33 @@
*/
package org.apache.isis.security.keycloak.authentication;
-import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;
import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import org.apache.isis.applib.annotation.OrderPrecedence;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.security.api.authentication.AuthenticationRequest;
import org.apache.isis.security.api.authentication.AuthenticationSession;
import org.apache.isis.security.api.authentication.standard.Authenticator;
import org.apache.isis.webapp.wormhole.AuthenticationSessionWormhole;
-
-@Log4j2 @NoArgsConstructor
-public class KeycloakAuthenticator implements Authenticator {
-
- @Inject private IsisConfiguration configuration;
-
-
- // -- init, shutdown
-
- public void init() {
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+@Service
+@Named("isisSecurityKeycloak.AuthenticatorKeycloak")
+@Order(OrderPrecedence.HIGH)
+@Qualifier("Keycloak")
+@Singleton
+@Log4j2
+public class AuthenticatorKeycloak implements Authenticator {
+
+ public AuthenticatorKeycloak() {
}
-
- public void shutdown() {
- }
-
- // -- Authenticator API
-
@Override
public final boolean canAuthenticate(final Class<? extends AuthenticationRequest> authenticationRequestClass) {
return true;
@@ -60,5 +59,4 @@ public class KeycloakAuthenticator implements Authenticator {
public void logout(final AuthenticationSession session) {
}
-
}
diff --git a/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/WebModuleKeycloak.java b/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/WebModuleKeycloak.java
index 1022d35..dbec699 100644
--- a/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/WebModuleKeycloak.java
+++ b/core/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/WebModuleKeycloak.java
@@ -42,7 +42,7 @@ import static org.apache.isis.commons.internal.exceptions._Exceptions.unexpected
* WebModule to enable support for Keycloak.
*/
@Service
-@Named("isisSecKeycloak.WebModuleKeycloak")
+@Named("isisSecurityKeycloak.WebModuleKeycloak")
@Order(OrderPrecedence.HIGHEST + 100)
@Qualifier("Keycloak")
@Log4j2
diff --git a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/IsisModuleSecurityShiro.java b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/IsisModuleSecurityShiro.java
index 49927a1..fd9df93 100644
--- a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/IsisModuleSecurityShiro.java
+++ b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/IsisModuleSecurityShiro.java
@@ -21,7 +21,6 @@ package org.apache.isis.security.shiro;
import javax.inject.Singleton;
import org.apache.isis.runtime.services.IsisModuleRuntimeServices;
-import org.apache.isis.security.api.IsisModuleSecurityApi;
import org.apache.isis.security.shiro.webmodule.WebModuleShiro;
import org.apache.isis.webapp.IsisModuleWebapp;
import org.springframework.context.annotation.Bean;
@@ -30,7 +29,7 @@ import org.springframework.context.annotation.Import;
import org.apache.isis.security.api.authentication.standard.Authenticator;
import org.apache.isis.security.api.authorization.standard.Authorizor;
-import org.apache.isis.security.shiro.authentication.ShiroAuthenticator;
+import org.apache.isis.security.shiro.authentication.AuthenticatorShiro;
import org.apache.isis.security.shiro.authorization.ShiroAuthorizor;
/**
@@ -45,17 +44,13 @@ import org.apache.isis.security.shiro.authorization.ShiroAuthorizor;
IsisModuleWebapp.class,
// @Service's
+ AuthenticatorShiro.class,
WebModuleShiro.class,
})
public class IsisModuleSecurityShiro {
@Bean @Singleton
- public Authenticator authenticator() {
- return new ShiroAuthenticator();
- }
-
- @Bean @Singleton
public Authorizor autorizor() {
return new ShiroAuthorizor();
}
diff --git a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/ShiroAuthenticator.java b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/AuthenticatorShiro.java
similarity index 91%
rename from core/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/ShiroAuthenticator.java
rename to core/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/AuthenticatorShiro.java
index 94a63fe..c025f87 100644
--- a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/ShiroAuthenticator.java
+++ b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/authentication/AuthenticatorShiro.java
@@ -25,7 +25,9 @@ import java.util.stream.Stream;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
+import javax.inject.Named;
+import org.apache.isis.applib.annotation.OrderPrecedence;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
@@ -52,40 +54,41 @@ import org.apache.isis.security.api.authentication.standard.Authenticator;
import org.apache.isis.security.api.authentication.standard.SimpleSession;
import org.apache.isis.security.api.authorization.standard.Authorizor;
import org.apache.isis.security.shiro.context.ShiroSecurityContext;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;
/**
- * If Shiro is configured for both {@link AuthenticationManagerInstaller authentication} and
- * {@link AuthorizationManagerInstaller authorization} (as recommended), then this class is
+ * If Shiro is configured for both authentication and authorization (as recommended), then this class is
* in the role of {@link Authenticator}.
*
* <p>
* However, although there are two objects, they are set up to share the same
* {@link SecurityManager Shiro SecurityManager}
* (bound to a thread-local).
+ * </p>
*/
-@Log4j2 @NoArgsConstructor
-public class ShiroAuthenticator implements Authenticator {
-
- @Inject private IsisConfiguration configuration;
-
- private boolean autoLogout;
-
- // -- LIFECYCLE
-
- @PostConstruct
- public void init() {
- autoLogout = configuration.getAuthentication().getShiro().isAutoLogoutIfAlreadyAuthenticated();
+@Service
+@Named("isisSecurityShiro.AuthenticatorShiro")
+@Order(OrderPrecedence.HIGH)
+@Qualifier("Keycloak")
+@Log4j2
+public class AuthenticatorShiro implements Authenticator {
+
+ private final IsisConfiguration configuration;
+ private final boolean autoLogout;
+
+ @Inject
+ public AuthenticatorShiro(IsisConfiguration configuration) {
+ super();
+ this.configuration = configuration;
+ this.autoLogout = this.configuration.getAuthentication().getShiro().isAutoLogoutIfAlreadyAuthenticated();
}
-// @Override
-// public void shutdown() {
-// }
-
- // -- Authenticator API
@Override
public final boolean canAuthenticate(final Class<? extends AuthenticationRequest> authenticationRequestClass) {
@@ -224,11 +227,4 @@ public class ShiroAuthenticator implements Authenticator {
return ShiroSecurityContext.getSecurityManager();
}
- /** Junit support */
- public ShiroAuthenticator(IsisConfiguration configuration) {
- super();
- this.configuration = configuration;
- }
-
-
}
diff --git a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
index 610820d..ec9f052 100644
--- a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
+++ b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
@@ -63,7 +63,7 @@ import lombok.val;
* @since 2.0
*/
@Service
-@Named("isisSecKeycloak.WebModuleKeycloak")
+@Named("isisSecurityKeycloak.WebModuleKeycloak")
@Order(OrderPrecedence.HIGHEST + 200)
@Qualifier("Shiro")
@Log4j2
diff --git a/core/security/shiro/src/test/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizorTest_authenticate.java b/core/security/shiro/src/test/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizorTest_authenticate.java
index 451a948..96fbf1d 100644
--- a/core/security/shiro/src/test/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizorTest_authenticate.java
+++ b/core/security/shiro/src/test/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizorTest_authenticate.java
@@ -34,7 +34,7 @@ import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.security.api.authentication.AuthenticationRequest;
import org.apache.isis.security.api.authentication.AuthenticationRequestPassword;
import org.apache.isis.security.api.authentication.AuthenticationSession;
-import org.apache.isis.security.shiro.authentication.ShiroAuthenticator;
+import org.apache.isis.security.shiro.authentication.AuthenticatorShiro;
import org.apache.isis.security.shiro.authorization.ShiroAuthorizor;
import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
@@ -51,7 +51,7 @@ public class ShiroAuthenticatorOrAuthorizorTest_authenticate {
@Rule
public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
- private ShiroAuthenticator authenticator;
+ private AuthenticatorShiro authenticator;
private ShiroAuthorizor authorizor;
@Before
@@ -62,7 +62,7 @@ public class ShiroAuthenticatorOrAuthorizorTest_authenticate {
val configuration = new IsisConfiguration();
configuration.getAuthentication().getShiro().setAutoLogoutIfAlreadyAuthenticated(false);
- authenticator = new ShiroAuthenticator(configuration);
+ authenticator = new AuthenticatorShiro(configuration);
authorizor = new ShiroAuthorizor();
authenticator.init();
diff --git a/core/security/shiro/src/test/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizorTest_isVisibleInAnyRole.java b/core/security/shiro/src/test/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizorTest_isVisibleInAnyRole.java
index 87b9266..73da9c1 100644
--- a/core/security/shiro/src/test/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizorTest_isVisibleInAnyRole.java
+++ b/core/security/shiro/src/test/java/org/apache/isis/security/shiro/ShiroAuthenticatorOrAuthorizorTest_isVisibleInAnyRole.java
@@ -34,7 +34,7 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.security.api.authentication.AuthenticationRequest;
import org.apache.isis.security.api.authentication.AuthenticationRequestPassword;
-import org.apache.isis.security.shiro.authentication.ShiroAuthenticator;
+import org.apache.isis.security.shiro.authentication.AuthenticatorShiro;
import org.apache.isis.security.shiro.authorization.ShiroAuthorizor;
import org.apache.isis.unittestsupport.config.IsisConfigurationLegacy;
import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -53,7 +53,7 @@ public class ShiroAuthenticatorOrAuthorizorTest_isVisibleInAnyRole {
@Mock
private IsisConfigurationLegacy mockConfiguration;
- private ShiroAuthenticator authenticator;
+ private AuthenticatorShiro authenticator;
private ShiroAuthorizor authorizor;
@Before
@@ -64,7 +64,7 @@ public class ShiroAuthenticatorOrAuthorizorTest_isVisibleInAnyRole {
val configuration = new IsisConfiguration();
configuration.getAuthentication().getShiro().setAutoLogoutIfAlreadyAuthenticated(false);
- authenticator = new ShiroAuthenticator(configuration);
+ authenticator = new AuthenticatorShiro(configuration);
authorizor = new ShiroAuthorizor();
authenticator.init();
diff --git a/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/components/AuthenticationManagerNull.java b/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/components/AuthenticationManagerNull.java
deleted file mode 100644
index 9b684b9..0000000
--- a/core/testsupport/integtestsupport/src/main/java/org/apache/isis/integtestsupport/components/AuthenticationManagerNull.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.integtestsupport.components;
-
-import org.apache.isis.commons.internal.components.Noop;
-import org.apache.isis.security.api.authentication.AuthenticationRequest;
-import org.apache.isis.security.api.authentication.AuthenticationSession;
-import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
-import org.apache.isis.security.api.authentication.manager.RegistrationDetails;
-
-public class AuthenticationManagerNull implements AuthenticationManager, Noop {
-
- @Override
- public AuthenticationSession authenticate(final AuthenticationRequest request) {
- return null;
- }
-
- @Override
- public void closeSession(final AuthenticationSession session) {
- }
-
- @Override
- public boolean isSessionValid(final AuthenticationSession session) {
- return false;
- }
-
- public void testSetSession(final AuthenticationSession authenticationSession) {
- }
-
- @Override
- public boolean register(final RegistrationDetails registrationDetails) {
- return false;
- }
-
- @Override
- public boolean supportsRegistration(final Class<? extends RegistrationDetails> registrationDetailsClass) {
- return false;
- }
-
-}