From 89184f98c6f7e8d17fdc5ec8dbef49182476041c Mon Sep 17 00:00:00 2001 From: Viliam Repan Date: Mon, 13 Mar 2017 20:13:46 +0100 Subject: [PATCH] MID-3705 MID-3649 fix, also login page redirect after user is already authenticated fixed. --- .../midpoint/gui/api/page/PageBase.java | 12 ++---- .../breadcrumbs/BreadcrumbPageInstance.java | 8 ++++ .../midpoint/web/page/login/PageLogin.java | 16 +++++--- .../web/util/NewWindowNotifyingBehavior.java | 39 +++++++++++++++++++ 4 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/NewWindowNotifyingBehavior.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java index 944c8077f7f..aff529ea07b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java @@ -30,6 +30,7 @@ import com.evolveum.midpoint.web.page.admin.configuration.*; import com.evolveum.midpoint.web.page.admin.reports.*; import com.evolveum.midpoint.web.page.self.*; +import com.evolveum.midpoint.web.util.NewWindowNotifyingBehavior; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; @@ -274,14 +275,7 @@ public PageBase(PageParameters parameters) { MidPointAuthWebSession.getSession().setClientCustomization(); - add(new AjaxNewWindowNotifyingBehavior() { - - @Override - protected void onNewWindow(AjaxRequestTarget target) { - LOGGER.debug("Page version already used in different tab, refreshing page"); - setResponsePage(getPageClass(), getPageParameters()); - } - }); + add(new NewWindowNotifyingBehavior()); initializeModel(); @@ -499,6 +493,8 @@ public void renderHead(IHeaderResponse response) { // this attaches jquery.js as first header item, which is used in our // scripts. CoreLibrariesContributor.contribute(getApplication(), response); + +// response.render(JavaScriptHeaderItem.forScript("alert(window.name);", "windowNameScript")); } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/breadcrumbs/BreadcrumbPageInstance.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/breadcrumbs/BreadcrumbPageInstance.java index 5f4b3f874bd..924c6ec46ee 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/breadcrumbs/BreadcrumbPageInstance.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/breadcrumbs/BreadcrumbPageInstance.java @@ -16,6 +16,7 @@ package com.evolveum.midpoint.web.component.breadcrumbs; +import com.evolveum.midpoint.web.util.NewWindowNotifyingBehavior; import org.apache.commons.lang.Validate; import org.apache.wicket.Component; import org.apache.wicket.IPageFactory; @@ -26,6 +27,7 @@ import org.apache.wicket.request.mapper.parameter.PageParameters; import java.util.Arrays; +import java.util.List; /** * @author Viliam Repan (lazyman) @@ -55,6 +57,12 @@ public PageParameters getParameters() { @Override public WebPage redirect() { + List behaviors = page.getBehaviors(NewWindowNotifyingBehavior.class); + behaviors.forEach(behavior -> page.remove(behavior)); + + page.add(new NewWindowNotifyingBehavior()); + + return page; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageLogin.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageLogin.java index 00317e5d401..13df0d46426 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageLogin.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageLogin.java @@ -32,6 +32,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.RegistrationsPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityPolicyType; +import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -59,11 +60,6 @@ public class PageLogin extends PageBase { private static final String OPERATION_LOAD_REGISTRATION_POLICY = DOT_CLASS + "loadRegistrationPolicy"; public PageLogin() { - if (SecurityUtils.getPrincipalUser() != null) { - MidPointApplication app = getMidpointApplication(); - setResponsePage(app.getHomePage()); - } - BookmarkablePageLink link = new BookmarkablePageLink<>(ID_FORGET_PASSWORD, PageForgotPassword.class); link.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -157,4 +153,14 @@ protected void onConfigure() { protected void createBreadcrumb() { //don't create breadcrumb for login page } + + @Override + protected void onBeforeRender() { + super.onBeforeRender(); + + if (SecurityUtils.getPrincipalUser() != null) { + MidPointApplication app = getMidpointApplication(); + throw new RestartResponseException(app.getHomePage()); + } + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/NewWindowNotifyingBehavior.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/NewWindowNotifyingBehavior.java new file mode 100644 index 00000000000..3a9b91c6ea0 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/NewWindowNotifyingBehavior.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2010-2017 Evolveum + * + * Licensed 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 com.evolveum.midpoint.web.util; + +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import org.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.WebPage; + +/** + * Created by lazyman on 13/03/2017. + */ +public class NewWindowNotifyingBehavior extends AjaxNewWindowNotifyingBehavior { + + private static final Trace LOG = TraceManager.getTrace(NewWindowNotifyingBehavior.class); + + @Override + protected void onNewWindow(AjaxRequestTarget target) { + LOG.debug("Page version already used in different tab, refreshing page"); + WebPage page = (WebPage) getComponent(); + + page.setResponsePage(page.getPageClass(), page.getPageParameters()); + } +}