You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/07/21 05:44:51 UTC
[causeway] branch master updated: CAUSEWAY-3519: wkt vwr: attempted fix of regression with delegated authentication
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new a6cba5ca36 CAUSEWAY-3519: wkt vwr: attempted fix of regression with delegated authentication
a6cba5ca36 is described below
commit a6cba5ca3669085bed36fe933c85f66be612bc9c
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jul 21 07:44:47 2023 +0200
CAUSEWAY-3519: wkt vwr: attempted fix of regression with delegated
authentication
---
.../AuthenticatedWebSessionForCauseway.java | 17 +++++++++++++++++
.../integration/WebRequestCycleForCauseway.java | 20 +++++++++++++++-----
2 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/AuthenticatedWebSessionForCauseway.java b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/AuthenticatedWebSessionForCauseway.java
index 2799709bee..fbb80fa5ec 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/AuthenticatedWebSessionForCauseway.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/AuthenticatedWebSessionForCauseway.java
@@ -49,6 +49,7 @@ import org.apache.causeway.viewer.wicket.ui.components.widgets.breadcrumbs.Bread
import org.apache.causeway.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
import lombok.Getter;
+import lombok.NonNull;
import lombok.val;
/**
@@ -90,6 +91,22 @@ implements
this.authentication = authentication;
}
+ /**
+ * If there is an {@link InteractionContext} already (primed)
+ * (as some authentication mechanisms setup in filters,
+ * eg SpringSecurityFilter), then just use it.
+ * <p>
+ * However, for authorization, the authentication still must pass
+ * {@link AuthenticationManager} checks,
+ * as done in {@link #getAuthentication()},
+ * which on success also sets the signIn flag.
+ * <p>
+ * Called by {@link WebRequestCycleForCauseway}.
+ */
+ public void setPrimedInteractionContext(final @NonNull InteractionContext authentication) {
+ this.authentication = authentication;
+ }
+
@Getter
private UUID sessionGuid;
private String cachedSessionId;
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/WebRequestCycleForCauseway.java b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/WebRequestCycleForCauseway.java
index c761989225..457fb66974 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/WebRequestCycleForCauseway.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/WebRequestCycleForCauseway.java
@@ -142,14 +142,24 @@ implements
// but fail early if the current user is impersonating
// (seeing this if going back the browser history into a page, that was previously impersonated)
val interactionService = getInteractionService();
+ val authenticatedWebSession = AuthenticatedWebSessionForCauseway.get();
+
+ /*XXX for debugging delegated user ...
+ interactionService.openInteraction(InteractionContext
+ .ofUserWithSystemDefaults(
+ UserMemento.ofName("delegated")
+ .withRoleAdded(UserMemento.AUTHORIZED_USER_ROLE)
+ .withAuthenticationSource(AuthenticationSource.EXTERNAL)));*/
+
val currentInteractionContext = interactionService.currentInteractionContext();
- if(currentInteractionContext.isPresent()
- && currentInteractionContext.get().getUser().isImpersonating()) {
- throw _Exceptions.illegalState("cannot enter a new request cycle with a left over impersonating user");
+ if(currentInteractionContext.isPresent()) {
+ if(currentInteractionContext.get().getUser().isImpersonating()) {
+ throw _Exceptions.illegalState("cannot enter a new request cycle with a left over impersonating user");
+ }
+ authenticatedWebSession.setPrimedInteractionContext(currentInteractionContext.get());
}
- val interactionContext0 = currentInteractionContext
- .orElseGet(AuthenticatedWebSessionForCauseway.get()::getAuthentication);
+ val interactionContext0 = authenticatedWebSession.getAuthentication();
if (interactionContext0 == null) {
log.warn("onBeginRequest out - session was not opened (because no authentication)");
return;