Index: console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutLink.java =================================================================== --- console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutLink.java (revision 45371) +++ console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutLink.java (working copy) @@ -18,10 +18,12 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; +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.basic.Label; import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.protocol.http.WebApplication; import org.hippoecm.frontend.dialog.DialogWindow; import org.hippoecm.frontend.plugin.IPluginContext; import org.hippoecm.frontend.session.UserSession; @@ -57,6 +59,9 @@ dialogWindow.show(dialog); } else { userSession.logout(); + if (WebApplication.exists()) { + throw new RestartResponseException(WebApplication.get().getHomePage()); + } } } catch (RepositoryException e) { log.error(e.getMessage()); Index: console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutDialog.java =================================================================== --- console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutDialog.java (revision 45371) +++ console/frontend/src/main/java/org/hippoecm/frontend/plugins/logout/LogoutDialog.java (working copy) @@ -17,9 +17,11 @@ import javax.jcr.RepositoryException; +import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; +import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.value.IValueMap; import org.hippoecm.frontend.dialog.AbstractDialog; import org.hippoecm.frontend.dialog.DialogConstants; @@ -66,6 +68,9 @@ log.error("Unable to remove the pending changes upon logout."); } userSession.logout(); + if (WebApplication.exists()) { + throw new RestartResponseException(WebApplication.get().getHomePage()); + } } super.onClose(); } Index: engine/src/main/java/org/hippoecm/frontend/session/PluginUserSession.java =================================================================== --- engine/src/main/java/org/hippoecm/frontend/session/PluginUserSession.java (revision 45371) +++ engine/src/main/java/org/hippoecm/frontend/session/PluginUserSession.java (working copy) @@ -35,7 +35,6 @@ import org.apache.wicket.RestartResponseException; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; -import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.request.Request; import org.apache.wicket.request.cycle.RequestCycle; import org.hippoecm.frontend.Home; @@ -351,9 +350,6 @@ invalidate(); dirty(); - if (WebApplication.exists()) { - throw new RestartResponseException(WebApplication.get().getHomePage()); - } } public Credentials getCredentials() { Index: config/src/main/resources/cms-static.xml =================================================================== --- config/src/main/resources/cms-static.xml (revision 45371) +++ config/src/main/resources/cms-static.xml (working copy) @@ -414,6 +414,12 @@ header.bar.right + + service.logout + + + extension.logout + frontend:pluginconfig @@ -443,6 +449,17 @@ + + + frontend:plugin + + + org.hippoecm.frontend.plugins.cms.root.LogoutPlugin + + + service.logout + + Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java =================================================================== --- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java (revision 45371) +++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java (working copy) @@ -107,8 +107,6 @@ add(new Label("username", new PropertyModel(this, "username"))); - add(new LogoutLink("logout")); - services = new LinkedList(); final IDataProvider provider = new ListDataProvider(services) { Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.html =================================================================== --- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.html (revision 0) +++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.html (revision 0) @@ -0,0 +1,20 @@ + + + + + + Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html =================================================================== --- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html (revision 45371) +++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html (working copy) @@ -29,9 +29,7 @@ [ user ]
  • -
  • - -
  • +
Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutLink.java =================================================================== --- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutLink.java (revision 45371) +++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutLink.java (working copy) @@ -15,19 +15,21 @@ */ package org.hippoecm.frontend.plugins.cms.root; +import static org.hippoecm.frontend.util.WebApplicationHelper.HIPPO_AUTO_LOGIN_COOKIE_BASE_NAME; + import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.wicket.MarkupContainer; +import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.protocol.http.WebApplication; import org.hippoecm.frontend.session.UserSession; import org.hippoecm.frontend.util.WebApplicationHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.hippoecm.frontend.util.WebApplicationHelper.HIPPO_AUTO_LOGIN_COOKIE_BASE_NAME; - public class LogoutLink extends MarkupContainer { private static final long serialVersionUID = 1L; @@ -42,24 +44,47 @@ @Override public void onClick(AjaxRequestTarget target) { - LogoutLink.this.logout(); + LogoutLink.this.clearStates(); + LogoutLink.this.logoutSession(); + LogoutLink.this.redirectPage(); } }); } - protected void logout() { + /** + * Clear any user states other than user session. + */ + protected void clearStates() { // Remove the Hippo Auto Login cookie WebApplicationHelper.clearCookie(WebApplicationHelper.getFullyQualifiedCookieName(HIPPO_AUTO_LOGIN_COOKIE_BASE_NAME)); + } + /** + * Log out user session. + */ + protected void logoutSession() { UserSession userSession = UserSession.get(); + try { Session session = userSession.getJcrSession(); + if (session != null) { session.save(); } } catch (RepositoryException e) { log.error(e.getMessage()); } + userSession.logout(); } + + /** + * Redirect it to (home)page + */ + protected void redirectPage() { + if (WebApplication.exists()) { + throw new RestartResponseException(WebApplication.get().getHomePage()); + } + } + } Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.java =================================================================== --- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.java (revision 0) +++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/LogoutPlugin.java (revision 0) @@ -0,0 +1,38 @@ +/* + * Copyright 2008-2013 Hippo B.V. (http://www.onehippo.com) + * + * 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 org.hippoecm.frontend.plugins.cms.root; + +import org.apache.wicket.Component; +import org.hippoecm.frontend.plugin.IPluginContext; +import org.hippoecm.frontend.plugin.config.IPluginConfig; +import org.hippoecm.frontend.service.render.RenderPlugin; + +public class LogoutPlugin extends RenderPlugin { + + private static final long serialVersionUID = 1L; + + @SuppressWarnings("unused") + private String username; + + public LogoutPlugin(IPluginContext context, IPluginConfig config) { + super(context, config); + add(createLogoutComponent("logout")); + } + + protected Component createLogoutComponent(final String componentId) { + return new LogoutLink(componentId); + } +}