From 523be3dadaab47ca60395b9fcaff66481f215baa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Thu, 9 Jun 2016 18:07:17 +0200 Subject: [PATCH] Continued with generic logout (please cherry-pick this): - _FOO changed to _LOGOUT - missing i18n strings set - added form so the user can still decide to logout or go back - added observer method afterUserLogout() which clears the localization bean - added controller method doLogout() which will do the job MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../AddressbookLocalizationSessionBean.java | 39 +++++++++++++- ...ressbookLocalizationSessionController.java | 8 +++ .../AddressbookUserLoginWebSessionBean.java | 51 ++++++++++++++++++- ...ressbookUserLoginWebSessionController.java | 7 +++ web/logout.xhtml | 21 -------- 5 files changed, 102 insertions(+), 24 deletions(-) delete mode 100644 web/logout.xhtml diff --git a/src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionBean.java b/src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionBean.java index a2a66379..d399a078 100644 --- a/src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionBean.java +++ b/src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionBean.java @@ -25,6 +25,7 @@ import javax.faces.context.FacesContext; import javax.inject.Named; import org.mxchange.addressbook.beans.BaseAddressbookController; import org.mxchange.jusercore.events.login.UserLoggedInEvent; +import org.mxchange.jusercore.events.logout.ObserveableUserLogoutEvent; /** * A session bean for handling localization/internationalization changes. This @@ -75,6 +76,33 @@ public class AddressbookLocalizationSessionBean extends BaseAddressbookControlle //* NOISY-DEBUG: */ System.out.println("LandingLocalizationSessionBean:afterUserLogin - EXIT!"); //NOI18N } + @Override + public void afterUserLogout (@Observes final ObserveableUserLogoutEvent event) { + // Trace message + //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("ReportsLocalizationSessionBean:afterUserLogin: event={0} - CALLED!", event)); //NOI18N + + // event should not be null + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); //NOI18N + } else if (event.getLoggedOutUser() == null) { + // Throw NPE again + throw new NullPointerException("event.loggedOutUser is null"); //NOI18N + } else if (event.getLoggedOutUser().getUserId() == null) { + // userId is null + throw new NullPointerException("event.loggedOutUser.userId is null"); //NOI18N + } else if (event.getLoggedOutUser().getUserId() < 1) { + // Not avalid id + throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getLoggedOutUser(), event.getLoggedOutUser().getUserId())); //NOI18N + } + + // Clear this bean as well + this.clear(); + + // Trace message + //* NOISY-DEBUG: */ System.out.println("ReportsLocalizationSessionBean:afterUserLogin - EXIT!"); //NOI18N + } + @Override public String getLanguage () { //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("AddressbookLocalizationSessionBean::getLanguage(): locale.language={0} - EXIT!", this.getLocale().getLanguage())); //NOI18N @@ -103,7 +131,6 @@ public class AddressbookLocalizationSessionBean extends BaseAddressbookControlle // Log debug message //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("AddressbookLocalizationSessionBean::setLanguage: loc={0}", loc)); //NOI18N - // Set it here and in the JSF context this.setLocale(loc); FacesContext.getCurrentInstance().getViewRoot().setLocale(loc); @@ -146,7 +173,6 @@ public class AddressbookLocalizationSessionBean extends BaseAddressbookControlle // Log debug message //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("AddressbookLocalizationSessionBean::init: loc={0}", loc)); //NOI18N - // Set it here this.setLocale(loc); @@ -154,4 +180,13 @@ public class AddressbookLocalizationSessionBean extends BaseAddressbookControlle //* NOISY-DEBUG: */ System.out.println("AddressbookLocalizationSessionBean::init: EXIT!"); //NOI18N } + /** + * Clears this bean + */ + private void clear () { + // Clear all fields + this.setLanguage(null); + this.setLocale(null); + } + } diff --git a/src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionController.java b/src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionController.java index 8b5422a2..29cc6854 100644 --- a/src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionController.java +++ b/src/java/org/mxchange/addressbook/beans/localization/AddressbookLocalizationSessionController.java @@ -19,6 +19,7 @@ package org.mxchange.addressbook.beans.localization; import java.io.Serializable; import java.util.Locale; import org.mxchange.jusercore.events.login.UserLoggedInEvent; +import org.mxchange.jusercore.events.logout.ObserveableUserLogoutEvent; /** * An interface for localization change beans @@ -34,6 +35,13 @@ public interface AddressbookLocalizationSessionController extends Serializable { */ void afterUserLogin (final UserLoggedInEvent event); + /** + * Event observer for logged-out user + *

+ * @param event Event instance + */ + void afterUserLogout (final ObserveableUserLogoutEvent event); + /** * Getter for locale *

diff --git a/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionBean.java b/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionBean.java index 6f38d3fb..e4837c42 100644 --- a/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionBean.java +++ b/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionBean.java @@ -20,6 +20,7 @@ import java.util.Objects; import javax.enterprise.context.SessionScoped; import javax.enterprise.event.Event; import javax.enterprise.inject.Any; +import javax.faces.context.FacesContext; import javax.faces.view.facelets.FaceletException; import javax.inject.Inject; import javax.inject.Named; @@ -32,6 +33,8 @@ import org.mxchange.jusercore.container.login.LoginContainer; import org.mxchange.jusercore.container.login.UserLoginContainer; import org.mxchange.jusercore.events.login.UserLoggedInEvent; import org.mxchange.jusercore.events.login.UserLoginEvent; +import org.mxchange.jusercore.events.logout.ObserveableUserLogoutEvent; +import org.mxchange.jusercore.events.logout.UserLogoutEvent; import org.mxchange.jusercore.exceptions.UserNotFoundException; import org.mxchange.jusercore.exceptions.UserPasswordMismatchException; import org.mxchange.jusercore.exceptions.UserStatusLockedException; @@ -95,6 +98,20 @@ public class AddressbookUserLoginWebSessionBean extends BaseAddressbookControlle */ private boolean userLoggedIn; + /** + * Event fired when user has logged in + */ + @Inject + @Any + private Event userLoginEvent; + + /** + * Event fired when user has logged out + */ + @Inject + @Any + private Event userLogoutEvent; + /** * Default constructor */ @@ -130,7 +147,10 @@ public class AddressbookUserLoginWebSessionBean extends BaseAddressbookControlle this.setTemplateType("login"); //NOI18N // Fire event away. Keep this last before return statement. - this.loginEvent.fire(new UserLoginEvent(confirmedUser)); + this.userLoginEvent.fire(new UserLoginEvent(confirmedUser)); + + // Clear this bean + this.clear(); // All fine return "login"; //NOI18N @@ -140,6 +160,26 @@ public class AddressbookUserLoginWebSessionBean extends BaseAddressbookControlle } } + @Override + public void setBaseTemplatePathName (final String baseTemplatePathName) { + this.baseTemplatePathName = baseTemplatePathName; + } + + @Override + public String doUserLogout () { + // Fire event + this.userLogoutEvent.fire(new UserLogoutEvent(this.getLoggedInUser())); + + // Invalidate session + FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); + + // Unset any user instances + this.setLoggedInUser(null); + + // Redirect to index + return "index?faces-redirect=true"; //NOI18N + } + @Override public String getCurrentPassword () { return this.currentPassword; @@ -219,4 +259,13 @@ public class AddressbookUserLoginWebSessionBean extends BaseAddressbookControlle // Return it return this.userLoggedIn; } + + /** + * Clears this bean + */ + private void clear () { + // Clear all fields + this.setCurrentPassword(null); + } + } diff --git a/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionController.java b/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionController.java index 91cc87a5..63d2aa83 100644 --- a/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionController.java +++ b/src/java/org/mxchange/addressbook/beans/login/AddressbookUserLoginWebSessionController.java @@ -62,6 +62,13 @@ public interface AddressbookUserLoginWebSessionController extends Serializable { */ String doUserLogout (); + /** + * Logout for current user by invalidating the current session. + *

+ * @return Outcome (should be redirected) + */ + String doLogout (); + /** * Getter for logged-in user instance *

diff --git a/web/logout.xhtml b/web/logout.xhtml deleted file mode 100644 index 98b02eb1..00000000 --- a/web/logout.xhtml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - #{msg.PAGE_TITLE_INDEX_FOO} - - - #{msg.CONTENT_TITLE_INDEX_FOO} - - - - Here goes your content. - - - -- 2.39.5